2009-11-13 2 views
6

При создании моего установщика WiX я столкнулся с проблемой при попытке закрыть приложение перед установкой обновления. Ниже приведен пример того, как я пытаюсь это сделать.Закрытие приложения с использованием 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

Было бы здорово, если бы вы объяснили, в чем была ошибка: принятый ответ просто предлагает создать журнал установки ... –

+0

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

ответ

7

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

msiexec.exe /i [msi filename] /log [filepath\logfilename.log] 
0

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

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

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

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