WIX: перезапустить службу, если установка отменена?

Можно ли перезапустить службу, если настройка MSI отменена пользователем?

Существует два сценария, когда MSI должен перезапустить службу.

  1. Остановите и обновите старые служебные файлы, а затем запустите службу. Если служба не запускается, замените старые файлы и перезапустите службу. [Эта часть сделана с откатом]
  2. Перезапустите службу, если 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 &amp;&amp; net start AppServerSvc'
        Return='asyncWait'
        Execute='deferred'
    />

1 ответ

Решение

Если вы планируете обновить MSI во время транзакции, например, используйте:

  • MajorUpgrade/@Schedule='afterInstallInitialize' или же
  • MajorUpgrade/@Schedule='afterInstallExecute' или же
  • MajorUpgrade/@Schedule='afterInstallExecuteAgain'

и использовать ServiceControl элемент для запуска / остановки / перезапуска службы, тогда установщик Windows сделает всю работу за вас.

Это , безусловно, самый рекомендуемый способ для достижения вашей цели.

Другие вопросы по тегам