WIX: перезапустить службу, если установка отменена?
Можно ли перезапустить службу, если настройка MSI отменена пользователем?
Существует два сценария, когда MSI должен перезапустить службу.
- Остановите и обновите старые служебные файлы, а затем запустите службу. Если служба не запускается, замените старые файлы и перезапустите службу. [Эта часть сделана с откатом]
- Перезапустите службу, если MSI намеренно отменен во время процесса установки.
У меня есть решение, которое я могу назвать CustomAction
при отмене и использовал CMD.EXE для перезапуска службы, но мне это не нравится. Пожалуйста, предложите любое другое решение, например, используя RestartResource
или же ResourceManager
Код:
<InstallExecuteSequence >
<RemoveExistingProducts
After="InstallInitialize"/>
<Custom Action="RenameFileOnCancel" OnExit="cancel">1</Custom>
</InstallExecuteSequence>
<CustomAction
Id='RestartService'
Directory='TARGETDIR'
ExeCommand='[SystemFolder]cmd.exe net stop AppServerSvc && net start AppServerSvc'
Return='asyncWait'
Execute='deferred'
/>
1 ответ
Решение
Если вы планируете обновить MSI во время транзакции, например, используйте:
MajorUpgrade/@Schedule='afterInstallInitialize'
или жеMajorUpgrade/@Schedule='afterInstallExecute'
или жеMajorUpgrade/@Schedule='afterInstallExecuteAgain'
и использовать ServiceControl
элемент для запуска / остановки / перезапуска службы, тогда установщик Windows сделает всю работу за вас.
Это , безусловно, самый рекомендуемый способ для достижения вашей цели.