2011-06-08 125 views
2

我需要在安装过程中重新启动Windows资源管理器进程。目前我们强制用户重新启动以确保Explorer进程真的重新启动,但我想要更灵活一些。WIX:根据先前执行的自定义操作的成功运行自定义操作

我有一个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

您可以创建VB脚本自定义操作,这将做到以下几点:

  1. 运行RestartExplorer.exe
  2. 如果失败设置一些全局属性(例如EXPLORER_RESTART_FAILED = 1)

然后使用ShaduleReboot如果EXPLORER_RESTART_FAILED为1.

+0

可能的解决办法。如果我使用内置的QtExecCmdLine不可能? – tronda 2011-06-08 12:00:14

+0

老实说,我没有使用QtExecCmdLine。但我相信它能够运行VB脚本以及exe – gtikok 2011-06-08 12:19:22