WiX:使用msiexec / i Setup.msi / qn时不运行自定义操作(没有UI的安静模式安装)

问题描述 投票:0回答:2

我们的问题是当使用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",尝试这个虽然没有帮助!

请帮忙!

wix windows-installer custom-action msiexec silent-installer
2个回答
0
投票

显而易见的解释是USEIMPERSONATE的值为1,因此自定义操作不会运行,但我假设您可能在命令行上将其设置为0。

除此之外,知道安装是否实际成功是有用的,因为如果它通常需要使用UAC提示进行提升,则不会显示此UAC对话框,因此自定义操作将不会升级并且将失败。安装可能会成功,因为在安装后运行Commit自定义操作,因此“check”不相关,因为安装无法回滚。如果将该CA配置为安装自定义操作,则可能会失败并回滚安装。因此,InstallFiles也不相关,因为它是一个Commit CA.

日志应该显示一些东西。


0
投票

好的,我找到了错误的原因并修复了它:ALLUSERS OR PREVIOUSINSTALLSCOPE(从注册表中读取)属性必须设置为“1”。这样,DISABLE_IMPERSONATE自定义操作就会运行并将USEIMPERSONATE属性设置为“0”。然后UPDATE_CONFIG和其他自定义操作运行。

总之,解决方案是:

  1. DISABLE_IMPERSONATE Property更改为:<Custom Action="DISABLE_IMPERSONATE" After="AppSearch"><![CDATA[ALLUSERS=1 OR PREVIOUSINSTALLSCOPE="1"]]></Custom>
  2. 像这样叫msiexec:msiexec /i Bechtle.A365.Office.Client.msi /qn ALLUSERS=1

感谢@ Ritmo2k,@ Brian Sutherland和@PhilDW指出我正确的方向。

© www.soinside.com 2019 - 2024. All rights reserved.