2014-12-22 84 views
1

執行我有一個包含下面的代碼片段一個WXS文件:WiX的升級元素不修理

<Upgrade Id="{FE576A6C-AF60-4569-B81D-1B025F88F9D7}"> 
    <UpgradeVersion Property="LCGUID" OnlyDetect="yes" 
     Minimum="0.0.0" IncludeMinimum="yes" 
     Maximum="9.0.0" IncludeMaximum="no" /> 
</Upgrade> 

這將尋找另一片安裝的軟件(命名爲LC),並設置GUID來升級版本物業LCGUID。稍後用於驗證是否安裝了正確的LC。

這適用於「安裝」或「升級」軟件。我可以在日誌中看到這一點:

MSI (c) (9C:A8) [02:28:48:422]: PROPERTY CHANGE: Adding LCGUID property. Its value is '{8023DC00-D425-4DE8-808C-C78FAD649A2F}'. 

現在,當我嘗試做修復,我也需要這個屬性被填充,但日誌不說的LCGUID什麼。

我懷疑修復時不執行「升級」元素。有人可以驗證並提供可能的解決方案嗎?

回答

3

如果您查看日誌,您應該看到類似於「跳過FindRelatedProducts操作:不在維護模式下運行」的內容,這就是UpgradeCode搜索的內容,因此您無法在維護/修復中運行模式。

首先在升級搜索完成後安裝,您可以將該屬性保存在註冊表中,使用WiX的「記憶屬性」模式。這意味着在全新安裝期間和維護模式期間需要兩次單獨的搜索。通常情況下,您將使用另一個屬性進行註冊表搜索,然後擁有一個自定義操作屬性集,該集只將LCGUID設置爲以Installed爲條件的REGISTRYGUID。

+0

這是我最初的解決方案,但是當「搜索組件」功能可用時,我不喜歡使用註冊表。我們從使用記憶屬性模式切換到使用升級GUID,因爲它似乎是一個更好的解決方案。直到我們發現它不適用於修理。 最終,我仍然沒有使用記憶屬性模式。最終目標是使用檢索到的產品GUID來查找我們需要的某個文件。在我的新解決方案中,我簡單地添加了一個帶有GUID的組件,然後再搜索它。這似乎適用於所有情況! 雖然謝謝! – Gurdt