2012-03-22 39 views
8

我處於一種不幸的狀態。我有一個安裝程序安裝並啓動一個托盤圖標應用程序(常見的.exe)WiX在卸載前關閉應用程序 - 關閉打開的應用程序消息

這是工作正常,但現在我想停止該應用程序之前,此用戶界面告訴用戶手動關閉應用程序出現,因爲在卸載例程,我的托盤圖標被刪除,但進程仍在運行。

我應用這個自定義操作卸載之前(甚至期間)來關閉應用

<CustomAction Id="CloseTrayApp" ExeCommand="-exit" FileKey="TrayApp" Execute="immediate" Return="asyncNoWait" /> 

<InstallExecuteSequence> 
    <Custom Action="CloseTrayApp" Before="InstallValidate" /> 
</InstallExecuteSequence> 

但「關閉所有正在運行的應用程序」對話框中仍然彈出,但我認爲這將解決我的問題。

我已經嘗試過使用CloseAction,但由於編譯時的錯誤,我急於使用它。上面說的是WixUtils命名空間可能會丟失,但我仔細檢查了它的存在:

xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" 

如何避免對話窗口坡平了,並觸發此自定義操作來執行?

回答

7

您還必須添加對WixUtilExtension.dll的引用。如果您使用Visual Studio/Votive,只需右鍵單擊添加引用並從[ProgramFilesFolder] Windows Installer XML v3.5 \ bin中選擇DLL。否則,你必須做出延長提供給編譯器和鏈接:

candle.exe yourfile.wxs -ext %full path to WixUtilExtension.dll%' 
light.exe yourfile.wixobj -ext %full path to WixUtilExtension.dll% –out yourfile.msi yourfile.wixout' 

更多信息,可以發現在:

Using Standard Custom Actions

請注意,CloseApp定製動作有一個限制,即它贏得't'終止'你的申請。它只會禮貌地向您的應用程序發送WM_CLOSE消息,並由您的trayapp接收並處理該消息並關閉。

+0

是否沒有其他方式使用自定義操作並傳遞像「-exit」這樣的參數,因爲我的程序會對此作出反應並自行終止。我認爲before語句Before =「InstallValidate」可能有問題。我可以在早期的情況下連接卸載程序嗎? – inva 2012-03-22 13:39:56

+0

對不起,我讀了你的描述,但不是你的代碼。看看:http://wix.sourceforge.net/manual-wix3/util_xsd_closeapplication.htm – 2012-03-22 14:23:44

+0

該死的它仍然不能正常工作...托盤圖標變得不可見,但托盤應用程序進程仍在運行...... :(我使用的是以下的closeapp語句: inva 2012-03-22 15:26:20