2010-02-02 90 views
6

我有一個WiX安裝程序,它具有每個功能需要在卸載時執行的自定義操作。現在,我遇到了執行操作的問題,無論用戶是否實際安裝了該功能。自定義操作失敗是因爲他們期望某些資源存在,然後整個安裝會處於崩潰狀態。僅當正在卸載已安裝的功能時,您如何在WiX中執行自定義操作?

當且僅當其相關功能被卸載時,運行自定義操作的正確方法是什麼?如果有幫助,我已經包含了我目前正在使用的代碼段。

<Custom Action="LaunchUninstallCustomAction" Before="RemoveFiles"><![CDATA[(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL") AND (&FeatureName<=2)]]></Custom> 

回答

16

嘗試

<Custom Action="LaunchUninstallCustomAction" Before="RemoveFiles"> 
    <![CDATA[(NOT UPGRADINGPRODUCTCODE) 
      AND (&FeatureName=2) AND (!FeatureName=3)]]> 
</Custom> 

查看MSDN瞭解病情語法detailsexamples

+0

這樣做。謝謝! – dskiles 2010-02-03 18:31:18

+0

嗨塞繆爾,請你詳細說明![CDATA [(沒有升級產品代碼)在你的片段 – sttaq 2012-05-16 09:23:58

+0

IIRC的目的,我包括在內,因爲它是在問題中的原始片段。目的是確保自定義操作僅在刪除特定功能時運行,而不是在整個產品正在升級時運行。 – 2012-05-16 10:16:00

-3

聽起來像自定義操作被打破,並沒有正確處理丟失的資源。

如果用戶手動刪除文件,CA如何處理它?如果用戶刪除應用程序文件夾,然後嘗試通過ARP將其刪除,會發生什麼情況?

如果用戶只是刪除某個功能而不卸載整個應用程序,會發生什麼情況?長期修復CA的情況會更好。

+0

那並沒有回答我的問題。我知道這不是最好的方法,但我受到了我無法避免的遺留代碼的束縛。鑑於這不是最好的辦法,考慮到提供的限制,最好的辦法是什麼? – dskiles 2010-02-03 15:14:12

+0

當自定義步驟無法基於環境檢測是否需要運行時,可能會出現這種情況。 – Dennis 2013-01-14 14:51:58

相關問題