如何在wix中以静默方式执行自定义操作?

时间:2014-04-16 12:36:05

标签: wix custom-action

我正在尝试在wix中卸载安装程序时执行自定义操作。它运行正常但是在自定义操作时显示cmd提示符的启动画面。我尝试使用CAQuietExec但它是无法卸载安装程序并给出错误。 (CAQuietExec:错误0x80070057:无法获取命令行数据)。

我使用的命令是:

<Fragment>
<Property Id="ModifyOutlookRegInitSign_14" Value="&quot;[SystemFolder]reg.exe&quot; ADD &quot;HKCU\SOFTWARE\Microsoft\Office\14.0\Outlook\Security&quot; /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>

4 个答案:

答案 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)

围绕属性设置为 WixQuietExecCmd的属性包装自定义操作。

Logout

WiX Quiet Execution of Custom Action

{{3}}