WIX:基于先前执行的自定义操作的成功运行自定义操作

时间:2011-06-08 11:48:00

标签: installer wix conditional wix3 custom-action

我需要在安装过程中重新启动Windows资源管理器进程。目前我们强制用户重新启动以确保Explorer进程真正重新启动,但我希望更灵活。

我有一个restartexplorer可执行文件,我可以在安装过程中调用它。我想要做的是调用restartexplorer可执行文件,并且只有在重新启动资源管理器自定义操作返回错误代码时才使用ScheduleReboot。

我可能会定义这样的内容:

<CustomAction Id='RestartProperty' Property='QtExecCmdLine'
    Value='"[INSTALLDIR]RestartExplorer.exe"' />
<CustomAction Id='Restart' BinaryKey='WixCA' DllEntry='CAQuietExec' Execute="immediate" Return="check" />

然后InstallExecuteSequence将是这样的:

<InstallExecuteSequence>
    ...
    <Custom Action="RestartProperty" Before="Restart">PREVIOUSVERSIONSINSTALLED</Custom>
    <Custom Action="Restart" After="SomeAction">PREVIOUSVERSIONSINSTALLED</Custom>
    <ScheduleReboot After="Restart"><![CDATA[(NOT Installed) AND (SomeErrorValue > 0)]]></ScheduleReboot>
</InstallExecuteSequence>

问题是如何从以前的自定义操作中获取错误代码?我可以使用QtExecCmdLine并仍然能够检查错误代码,还是直接从自定义操作标记中获取可执行文件?这必须适用于Windows XP SP3和更新版本,我更喜欢一个不必在操作系统版本之间有所不同的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以创建VB脚本自定义操作,该操作将执行以下操作:

  1. 运行RestartExplorer.exe
  2. 如果失败则设置一些全局属性(例如EXPLORER_RESTART_FAILED = 1)
  3. 如果EXPLORER_RESTART_FAILED为1,则使用ShaduleReboot。