Закрытие приложения с помощью WiX - PullRequest
7 голосов
/ 14 ноября 2009

При создании установщика WiX я столкнулся с проблемой при попытке закрыть приложение перед установкой обновления. Ниже приведен пример того, как я пытаюсь это сделать.

<util:CloseApplication Id="CloseServe" CloseMessage="yes" Target="server.exe" ElevatedCloseMessage="yes" RebootPrompt="no"/>
<InstallExecuteSequence>      
  <Custom Action="WixCloseApplications" After="RemoveExistingProducts" />
  <RemoveExistingProducts After="InstallInitialize"/>
  <Custom Action='LaunchApplication' After='InstallFinalize'/>
  <!--<Custom Action='StopServer' Before='RemoveExistingProducts'/>-->
</InstallExecuteSequence>

Используя этот пример, приложение закрывается, но в этот момент установка останавливается, а затем выполняет откат. Может ли это быть связано с тем, что exe удаляется до того, как пытаться закрыть его? Я попытался изменить последовательность так, чтобы RemoveExistingProducts выполнялся после WixCloseApplications, но затем выдает код ошибки 2613.

Ответы [ 2 ]

7 голосов
/ 23 ноября 2009

Вы можете попробовать войти в систему и посмотреть, что можно оттуда отследить. Попробуйте запустить установщик из командной консоли следующим образом:

msiexec.exe /i [msi filename] /log [filepath\logfilename.log]
0 голосов
/ 06 мая 2014

Я бы предположил, что вам нужно как можно раньше закрыть работающее приложение в InstallExecuteSequence и, конечно, до InstallInitialize , который запускает транзакцию установщика Windows, которая вносит изменения в систему .

Кроме того, вы должны выполнить ту же операцию ApplicationClose в InstallUISequence , а также, чтобы приложение закрывалось, пока вы в интерактивном режиме просматриваете меню установки. Вся InstallUISequence пропускается при установке в режиме без вывода сообщений, поэтому она также необходима в InstallExecuteSequence.

Имейте в виду, что вы можете случайно вызвать откат в пользовательском действии, возвращая код выхода / код ошибки, который msiexec.exe интерпретирует как ошибку. Если завершение пользовательского действия не имеет решающего значения, я отключаю проверку ошибок, чтобы продолжить установку. В этом случае это просто потребует перезагрузки.

Если вы пытаетесь закрыть или закрыть службу , MSI имеет встроенные функции для решения этой проблемы с помощью ServiceControl и ServiceInstall элементы ( и другие ).

...