permissions - 为什么未安装所选组件时 MSI 安装程序会成功?
问题描述
我有一个 MSI 安装程序包,它强制用户从可能要安装的组件列表中进行选择,例如“2018 版”/“2019 版”/“2020 版”。所选组件将自行安装在“ProgramData”内的文件夹中,该文件夹通常可由系统上的每个管理员帐户写入。但是,在最近的客户支持中,此文件夹是由 SYSTEM 帐户创建的。可能是客户的 IT 安装了具有 SYSTEM 权限的环境。
当安装程序尝试将文件放入此文件夹时,它显然会失败。问题是安装程序注意到缺少权限,但仍然成功。
当无法安装用户选择的组件(或任何其他重要组件)时,是否有任何方法可以强制 MSI 安装程序中止/抛出错误?
解决方案
您想要的应该是 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 属性的文件失败,安装将停止并回滚。在这种情况下,安装程序会显示一个没有忽略按钮的对话框。如果未设置此属性,并且文件安装失败,安装程序将显示一个带有忽略按钮的对话框。在这种情况下,用户可以选择忽略安装文件失败并继续。
推荐阅读
- javascript - React useState 不更新值
- azure - Microsoft 身份验证库 (MSAL) loginPopup:错误“提供的请求必须包含 'client_secret' 输入参数。|
- javascript - Javascript await Promise 使页面崩溃
- javascript - 调整窗口大小后,slideToggle 的“显示”属性仍然存在
- python - 如何使用带有 x_train 和 y_train 变量数据的神经网络的 python 生成器?
- php - 不明白为什么我必须使用 json_decode 两次。Laravel 迁移和模型
- html - 带有小部件菜单的基于 Hugo 的网站也是下拉菜单?
- jquery - 传单 - 特征数据不会实时更新
- mysql - MySQL:子查询检查超过 14000 行的子查询优化问题
- spring-boot - 由于 lombok,Gradle 构建失败