У меня есть необходимость перезапустить процесс 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 и новее, и я бы предпочел решение, которое не должно было отличаться в зависимости от версии ОС.