WiX:使用msiexec / i Setup.msi / qn时不运行自定义操作(没有UI的安静模式安装)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WiX:使用msiexec / i Setup.msi / qn时不运行自定义操作(没有UI的安静模式安装)相关的知识,希望对你有一定的参考价值。
我们的问题是当使用msiexec / i Setup.msi / qn(没有UI的安静模式安装)时,自定义操作不会运行。它们仅在使用UI进行正常安装时运行。
例如,在我们的Product.wxs中,我们定义了以下内容:
<Binary Id="SetupCustomAction" SourceFile="$(var.SetupCustomActions.TargetDir)$(var.SetupCustomActions.TargetName).CA.dll" />
<CustomAction Id="UPDATE_CONFIG" BinaryKey="SetupCustomAction" DllEntry="UpdateConfiguration" Execute="commit" Return="check" Impersonate="no" />
<InstallExecuteSequence>
...
<Custom Action="UPDATE_CONFIG" After="InstallFiles"><![CDATA[NOT Installed AND USEIMPERSONATE="0"]]></Custom>
...
</InstallExecuteSequence>
我们是否必须使用"Quiet Execution Custom Action",尝试这个虽然没有帮助!
请帮忙!
显而易见的解释是USEIMPERSONATE的值为1,因此自定义操作不会运行,但我假设您可能在命令行上将其设置为0。
除此之外,知道安装是否实际成功是有用的,因为如果它通常需要使用UAC提示进行提升,则不会显示此UAC对话框,因此自定义操作将不会升级并且将失败。安装可能会成功,因为在安装后运行Commit自定义操作,因此“check”不相关,因为安装无法回滚。如果将该CA配置为安装自定义操作,则可能会失败并回滚安装。因此,InstallFiles也不相关,因为它是一个Commit CA.
日志应该显示一些东西。
好的,我找到了错误的原因并修复了它:ALLUSERS
OR PREVIOUSINSTALLSCOPE
(从注册表中读取)属性必须设置为“1”。这样,DISABLE_IMPERSONATE
自定义操作就会运行并将USEIMPERSONATE
属性设置为“0”。然后UPDATE_CONFIG
和其他自定义操作运行。
总之,解决方案是:
- 将
DISABLE_IMPERSONATE
Property更改为:<Custom Action="DISABLE_IMPERSONATE" After="AppSearch"><![CDATA[ALLUSERS=1 OR PREVIOUSINSTALLSCOPE="1"]]></Custom>
- 像这样叫msiexec:
msiexec /i Bechtle.A365.Office.Client.msi /qn ALLUSERS=1
感谢@ Ritmo2k,@ Brian Sutherland和@PhilDW指出我正确的方向。
以上是关于WiX:使用msiexec / i Setup.msi / qn时不运行自定义操作(没有UI的安静模式安装)的主要内容,如果未能解决你的问题,请参考以下文章