2010-06-04 103 views
1

我正試圖在使用Wix進行卸載之前關閉一個進程。我已經證實,只要有一個可見的窗口,它就會工作,但如果沒有可見的窗口(這是大多數情況下這個應用程序,因爲它是一個系統托盤應用程序),卸載程序只是掛起,最終會繼續卸載,從而使進程繼續運行。Wix's util:CloseApplication擴展似乎不起作用

根據this forum post,Wix似乎在過去關閉最小化的應用程序時遇到了困難,所以我想知道這是否相關?

對於我能做些什麼來確保進程關閉有任何建議?有什麼辦法可以嘗試使用Win32 api在我的應用程序中捕獲消息?

這裏的CloseApplication聲明:

<util:CloseApplication Id="CloseApp" CloseMessage="yes" Target="App.exe" RebootPrompt="yes" /> 

而這裏的自定義操作:

<Custom Before="InstallInitialize" Action="WixCloseApplications">REMOVE = "ALL"</Custom> 

回答

4

看起來你正在計劃安裝交易之前WixCloseApplications自定義操作。自定義操作的工作方式是計劃一個實際關閉應用程序的延遲操作。除非在交易過程中發生(After="InstallInitialize"),否則無法完成此項工作。

該修復可能很容易。刪除Custom/@Action="WixCloseApplications"元素。

2

起初,請不要忘記引用WixUtilExtension.dll程序集。 同時檢查維克斯元素包含UtilExtension命名空間的定義:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 

我注意到,你應該改變你的自定義操作InstallInitialize之前執行。

<Custom Before="InstallInitialize" Action="WixCloseApplications">REMOVE = "ALL"</Custom> 

如果應用這些變化和CloseApplications擴展不起作用,嘗試登錄使用

msiexec /i MyApplication.msi /l*v MyLogFile.txt 
0

我也面臨這個問題的安裝過程。 將Before屬性更改爲「InstallValidate」爲我工作。

<Custom Before="InstallValidate" Action="WixCloseApplications"/>