我们的问题是,在使用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",尝试这一点并没有帮助!
请帮忙!
答案 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
和其他自定义操作。
总之,解决方案是:
将UPDATE_CONFIG
属性更改为:DISABLE_IMPERSONATE
按照以下方式致电msiexec:<Custom Action="DISABLE_IMPERSONATE" After="AppSearch"><![CDATA[ALLUSERS=1 OR PREVIOUSINSTALLSCOPE="1"]]></Custom>
感谢@ Ritmo2k,@ Brian Sutherland和@PhilDW指出我正确的方向。