У меня есть необходимость перезапустить процесс Windows Explorer во время установки. В настоящее время мы вынуждаем пользователя перезагрузиться, чтобы убедиться, что процесс Explorer действительно перезапущен, но я бы хотел быть более гибким.
У меня есть исполняемый файл restartexplorer, который я могу вызвать во время установки. Я хотел бы вызвать исполняемый файл restartexplorer и использовать ScheduleReboot, только если пользовательское действие restart explorer возвращает код ошибки.
Я, наверное, определю что-то вроде этого:
<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 и новее, и я бы предпочел решение, которое не должно отличаться в зависимости от версии ОС.