首页 > 解决方案 > 为什么未安装所选组件时 MSI 安装程序会成功?

问题描述

我有一个 MSI 安装程序包,它强制用户从可能要安装的组件列表中进行选择,例如“2018 版”/“2019 版”/“2020 版”。所选组件将自行安装在“ProgramData”内的文件夹中,该文件夹通常可由系统上的每个管理员帐户写入。但是,在最近的客户支持中,此文件夹是由 SYSTEM 帐户创建的。可能是客户的 IT 安装了具有 SYSTEM 权限的环境。

当安装程序尝试将文件放入此文件夹时,它显然会失败。问题是安装程序注意到缺少权限,但仍然成功。

当无法安装用户选择的组件(或任何其他重要组件)时,是否有任何方法可以强制 MSI 安装程序中止/抛出错误?

标签: permissionswixwindows-installeracl

解决方案


您想要的应该是 WiX / MSI 的默认行为,如下所述。如果没有日志文件,很难说发生了什么。

看看 WiX File@Vital 属性:https ://wixtoolset.org/documentation/manual/v3/xsd/wix/file.html

如果某个文件至关重要,则除非成功安装该文件,否则安装将无法继续。用户将无法忽略安装此文件的错误。如果发生错误,他们只能重试安装文件或中止安装。默认值为“yes”,除非使用 -sfdvital 开关 (candle.exe) 或 SuppressFileDefaultVital 属性 (.wixproj)。

它在 Windows Installer 文件表中设置基础 msidbFileAttributesVital 位掩码,如下所示:

https://docs.microsoft.com/en-us/windows/win32/msi/file-table

该文件对于其所属组件的准确操作至关重要。如果安装带有 msidbFileAttributesVital 属性的文件失败,安装将停止并回滚。在这种情况下,安装程序会显示一个没有忽略按钮的对话框。如果未设置此属性,并且文件安装失败,安装程序将显示一个带有忽略按钮的对话框。在这种情况下,用户可以选择忽略安装文件失败并继续。


推荐阅读