2010-06-24 82 views
3

我有一個使用WiX完成的安裝程序。安裝完成後,它會啓動一個在Explorer進程中注入一些代碼的應用程序。WiX卸載 - 在重新啓動管理器之前關閉應用程序

目前,當我卸載時,重新啓動管理器啓動並提供關閉我的應用程序和資源管理器。而不是我想手動關閉我的應用程序(這是通過在命令行中使用-exit再次運行來完成的)。我有一個自定義操作。

這裏是我試過到目前爲止:

<CustomAction ExeCommand="-exit" FileKey="MyApp.exe" Id="CloseMyApp" Impersonate="yes" Return="ignore" /> 

<InstallExecuteSequence> 
    <RemoveExistingProducts After="InstallInitialize" /> 
    <Custom Action="CloseMyApp" Before="RemoveFiles" /> 
</InstallExecuteSequence> 

這是行不通的。該操作在重新啓動管理器會話之後完成。所以重新啓動管理器彈出並要求關閉我的應用程序和資源管理器。該動作稍後運行,但到那時應用程序已經消失。

於是我嘗試這樣做:

<InstallExecuteSequence> 
    <RemoveExistingProducts After="InstallInitialize" /> 
    <Custom Action="CloseMyApp" Before="RemoveExistingProducts" /> 
</InstallExecuteSequence> 

這也不起作用。行動已經太晚了。我還得到了「警告LGHT1076:ICE63:某些操作屬於InstallInitialize和RemoveExistingProducts之間。」。

所以基本上 - 如何在卸載期間和重新啓動管理器會話之前執行我的自定義操作?

我猜如果我使用Impersonate =「no」它可能會在正確的時間運行,但這不是一個選項。這是因爲新進程必須針對與需要關閉的進程相同的用戶運行,因爲它查找窗口併發送消息。如果這些進程屬於不同的用戶,那麼要做得更加棘手。

任何想法?

回答

5

您需要CloseMyApp自定義操作才能在InstallValidate之前運行,因爲那是在處理重新啓動管理器時(doc)。或者,您可以使用MSIDISABLERMRESTART或MSIRESTARTMANAGERCONTROL屬性禁用重新啓動管理器。

相關問題