我安裝了兩個產品。它們具有相同的版本號和升級代碼,但具有不同的產品代碼。我想對這些產品之一進行重大升級,但是我創建的升級exe最終將刪除這兩個產品並安裝新產品。兩個產品具有相同的升級代碼時升級一個產品,但不升級另一個產品
也就是說,當產品與另一個想要升級的產品具有相同的升級代碼時,如何安裝一個產品?
我安裝了兩個產品。它們具有相同的版本號和升級代碼,但具有不同的產品代碼。我想對這些產品之一進行重大升級,但是我創建的升級exe最終將刪除這兩個產品並安裝新產品。兩個產品具有相同的升級代碼時升級一個產品,但不升級另一個產品
也就是說,當產品與另一個想要升級的產品具有相同的升級代碼時,如何安裝一個產品?
升級表首先驅動FindRelatedProducts。 FindRelatedProducts使用這些信息執行MSI產品搜索。如果在ActionProperty列中指定的屬性中放置ProductCode,則稍後,RemoveExistingProducts會執行卸載任何ActionProperty屬性中的任何ProductCodes(前提是未設置msidbUpgradeAttributesOnlyDetect)。
因此,像這樣的粘性情況的訣竅是創作一個升級行,將導致FindRelatedProducts找不到任何產品。然後使用自定義操作進行自己的搜索並根據需要設置屬性(一個而不是其他)。現在RemoveExistingProducts將能夠執行主要升級。
作爲一個方面說明:這是一個工作,而不是一個最佳實踐。仔細考慮您對UpgradeCodes,ProductCodes和ProductVersion屬性的選擇,以避免將來出現這種情況。
感謝您的解決方法。我知道這不是最好的做法,但它看起來像我沒有選擇..再次感謝您的幫助。我很感激。 – fairyberry 2013-02-19 01:07:46
@Christopher Painter:希望你能幫助我解決這個問題......謝謝。 – fairyberry 2013-02-18 16:27:01
兩種產品的[ProductLanguage屬性](http://msdn.microsoft.com/En-US/Library/Windows/Desktop/5d798825-c70b-4d5a-b88c-a9db40663f6a)是否也相同?如果ProductLanguage也相同,則[升級表](http://msdn.microsoft.com/En-US/Library/Windows/Desktop/f5fda405-8a09-495e-aa8c-b808a2f02b0f)不支持此方案。您可以在MSDN文檔中看到[使用UpgradeCode](http://msdn.microsoft.com/En-US/Library/Windows/Desktop/de62bb80-56a0-4652-9509-5d36ed171c69)以獲取支持的方案的說明。 – 2013-02-18 17:00:26
完成。順便說一句,這是一個真正的問題。你不是第一個問這個問題的人。 – 2013-02-18 17:45:31