2009-11-13 96 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刪除的事實?我曾嘗試更改序列,以便在WixCloseApplications後執行RemoveExistingProducts,但它會給我一個錯誤代碼2613.

+2

如果你最後解釋錯誤是什麼 - 接受的答案只是建議生成一個安裝日誌... – 2011-01-05 08:46:34

+0

它已經很長時間了,我真的不記得完整的問題。日誌記錄幫助我追蹤了它。這是一個序列問題,您無法在刪除現有產品之前以此方式關閉該程序,但如果它正在運行,則無法刪除現有產品。引導程序幫助我解決了這個問題。 – 2011-01-05 14:40:47

回答

7

您可以嘗試記錄安裝並查看可以從那裏追蹤的內容。嘗試從命令控制檯運行安裝程序,像這樣:

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

我會認爲你需要儘早關閉在InstallExecuteSequence運行的應用程序,當然之前InstallInitialize這將啓動Windows安裝程序交易會對系統進行更改。

此外,您應運行相同InstallUISequence應用關閉操作以及使應用程序被關閉,同時通過安裝菜單你循環交互。當您安靜地安裝時,整個InstallUISequence會被跳過,所以您在InstallExecuteSequence中也需要它。

請注意,您可以accidentially通過返回的退出代碼/錯誤代碼msiexec.exe的解釋爲錯誤觸發回滾定製操作。如果自定義操作的完成並不重要,則關閉錯誤檢查以允許繼續安裝。在這種情況下,這隻會導致需要重新啓動。

如果你正在嘗試關閉或關閉是服務,微星內置功能通過ServiceControlServiceInstall元素(and others)來處理這個問題。