我正在尝试在wix中卸载安装程序时执行自定义操作。它运行正常但是在自定义操作时显示cmd提示符的启动画面。我尝试使用CAQuietExec但它是无法卸载安装程序并给出错误。 (CAQuietExec:错误0x80070057:无法获取命令行数据)。
我使用的命令是:
<Fragment>
<Property Id="ModifyOutlookRegInitSign_14" Value=""[SystemFolder]reg.exe" ADD "HKCU\SOFTWARE\Microsoft\Office\14.0\Outlook\Security" /v InitSign /t REG_DWORD /d 0 /f"/>
<CustomAction Id="ModifyOutlookRegInitSign_14" BinaryKey="WixCA" DllEntry="CAQuietExec"
Execute="deferred" Return="check" />
<InstallExecuteSequence>
<Custom Action="ModifyOutlookRegInitSign_14" Before="InstallFinalize"></Custom>
</InstallExecuteSequence>
</Fragment>
答案 0 :(得分:4)
如果是立即自定义操作,则包含命令行作为值的属性的名称必须为Id="QtExecCmdLine"
。对于其他类型的自定义操作,请阅读Quiet Execution Custom Action。
答案 1 :(得分:1)
在我看来,您正在尝试在卸载期间更新HKCU。这可能是因为Windows Installer本身不支持这样做的能力。
但是您提出的解决方案缺乏多种方式。主要是它不支持回滚,也不支持清理其他用户配置文件。
此注册表项是否必须在HKCU中实施?它可以在HKLM实施吗?
答案 2 :(得分:0)
我已经创建了一个自定义操作来默默地杀死进程,如下所示:
<!-- WixQuietExecCmdLine specify the cmd to be executed -->
<Property Id="WixQuietExecCmdLine" Value='"[WindowsFolder]System32\TaskKill.exe" /F /T /IM MyApp.exe'/>
<!-- From WiX v3.10, use WixQuietExec -->
<CustomAction Id="MyAppTaskKill" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="immediate" Return="ignore"/>
<!-- trigger the custom action -->
<InstallExecuteSequence>
<Custom Action='MyAppTaskKill' Before='InstallValidate'></Custom>
</InstallExecuteSequence>
您可以在此处获得有关可能的配置组合的更多信息: http://wixtoolset.org/documentation/manual/v3/customactions/qtexec.html
答案 3 :(得分:0)