2015-05-27 60 views
0

在我們產品的一個安裝程序版本中,我添加了一個自定義對話框(由CA使用session.Message()顯示),詢問用戶是否希望在卸載時保留他的一些數據。WIX在進行重大升級時抑制卸載對話框?

CA的條件設置爲REMOVE="ALL" AND NOT WIX_UPGRADE_DETECTED。 正常卸載時正確顯示該對話框,但在主要升級時刪除現有產品時也會顯示該對話框。此時,安裝程​​序會掛起,只能從任務管理器關閉安裝程序,導致升級不正確。

包含問題的安裝程序版本已發貨。 我們可以在下一個安裝程序版本中包含哪些內容(即進行重大升級),可以在刪除現有產品時解決對話框問題?

回答

1

您需要修復原始版本的緩存MSI。在無提示安裝事務期間不應該有任何UI。您需要製作原始內置MSI的副本,將其修改爲不執行該自定義操作,然後使用msiexec/I foo.msi重新緩存它,重新安裝= ALL REINSTALLMODE = vomus,然後才能執行主要升級。或者,告訴用戶先進行卸載。這就是你在生產之前測試你的服務策略的原因。微星就像一架飛機......沒有停止或返回按鈕。你總是前進,你必須做出相應的規劃。

+0

我已經在新版本(主要升級)中創建了一個CA,如您所描述的那樣調用msiexec(使用更正後的msi)。該操作在FindRelatedProducts之後運行,但由於某些原因,緩存的msi未被替換,並且升級崩潰。但是,當我試圖從控制檯應用程序調用msiexec時,緩存的msi被正確替換。你知道爲什麼會發生這種情況嗎? –

+0

MSI具有一個互斥體,可防止兩個併發安裝。一個msi不能安裝另一個MSI(有效的recache)。您需要在運行新的MSI之前運行該命令。 –

+0

我猜測我必須在安裝主要升級之前以某種方式從軟件包中運行msiexec命令。或者,你的意思是我必須創建一個單獨的應用程序來運行命令? –

2

屬性UPGRADINGPRODUCTCODE在舊產品中設置,因爲它正在被卸載。 WIX_UPGRADE_DETECTED在檢測到傳入的新升級設置時設置。

REMOVE =「ALL」且NOTGRADINGPRODUCTCODE的條件似乎是您想要的,顯示的是在unallall期間的對話框,但不是在卸載時是因爲主要升級。

+0

感謝您的建議。我知道現在和我已經在新版本上相應地設置了標誌。問題出在以前的版本上,這個版本已經有了錯誤的標誌。 –

+0

Chris的答案就是你所需要的 - 更改緩存的MSI,或者建立一個小升級來更新破損的已安裝產品。 – PhilDW