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

时间:2017-12-18 10:59:23

标签: wix windows-installer custom-action msiexec silent-installer

我们的问题是,在使用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",尝试这一点并没有帮助!

请帮忙!

2 个答案:

答案 0 :(得分:0)

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

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

日志应显示一些内容。

答案 1 :(得分:0)

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

总之,解决方案是:

  1. UPDATE_CONFIG属性更改为:DISABLE_IMPERSONATE

  2. 按照以下方式致电msiexec:<Custom Action="DISABLE_IMPERSONATE" After="AppSearch"><![CDATA[ALLUSERS=1 OR PREVIOUSINSTALLSCOPE="1"]]></Custom>

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