2016-02-11 90 views
0

我有一個wix安裝程序,用於安裝不同版本的軟件。並行安裝相同的軟件(差異版本)是允許的。 wix產品代碼是'*',所以它一直是主要升級。Wix安裝程序有選擇地卸載以前的版本

現在,我需要選擇性地卸載以前版本的軟件。爲此,我已經在UpgradeVersion標籤中定義了版本範圍?

<Upgrade Id="ID"> 
    <UpgradeVersion Minimum="0.0.0.0" Maximum="0.5.0.0" IncludeMinimum="yes" IncludeMaximum="no" Property="FORCEREMOVEOLDVERSION" /> 
    <UpgradeVersion Minimum="0.6.0.0" Maximum="0.7.0.0" IncludeMinimum="yes" IncludeMaximum="yes" Property="SELECTIVELY_UNINSTALL" /> 
    <UpgradeVersion Minimum="0.8.0.0" Maximum="1.5" IncludeMinimum="yes" IncludeMaximum="yes" Property="OLDERVERSIONDETECTED" /> 
</Upgrade> 

這很好用。但是,當我必須有選擇地卸載範圍0.6 - 0.7時,我如何做一個單獨的操作,因爲只有一個RemoveExistingProducts標記。

<InstallExecuteSequence> 
    <RemoveExistingProducts Overridable="no" Before="InstallInitialize" /> 
</InstallExecuteSequence> 

能否請你提出可行的方法,以便能夠檢查「SELECTIVELY_UNINSTALL」標誌,並刪除在此範圍內(0.6-0.7),同時自動刪除其他以前的版本?

謝謝。

+1

我認爲問題在於那些已安裝的產品都具有相同的UpgradeCode,並且我相信Windows Installer會選擇其中一個已安裝的產品進行卸載,而不是全部。如果產品是並行安裝的並需要進行有選擇的升級,那麼他們都需要不同的UpgradeCodes。然後,您可以在任何升級安裝上使用升級元素來決定要替換哪些舊產品。 – PhilDW

回答

1

我從來沒有機會親自驗證這一點,但應該有一個非常簡單的方法來處理這個問題。要了解它,首先你必須瞭解FindRelatedProductsRemoveExistingProducts是做什麼的。鍵是在FindRelatedProducts的第二setence,並在RemoveExistingProducts第一句:

當FindRelatedProducts檢測升級信息和安裝產品之間的對應關係,其附加的產品代碼在ActionProperty列中指定的屬性的升級表。

的RemoveExistingProducts操作經過在升級表的ActionProperty列中列出的產品代碼並通過調用併發安裝在刪除序列中的產品。

既然你要經常清除和存儲在FORCEREMOVEOLDVERSIONOLDERVERSIONDETECTED任何以前的版本,但有條件刪除任何版本foun並存儲在SELECTIVELY_UNINSTALL,所有你需要做的是明確有條件的財產SELECTIVELY_UNINSTALL。在更復雜的情況下,您甚至可以解析存儲在由ActionProperty引用的屬性中的產品代碼列表,並僅刪除其中的一部分。

請注意,這不允許您通過向產品代碼添加產品代碼來解決ALLUSERS必須匹配的要求。

+0

輝煌!這工作...謝謝邁克爾。 –

相關問題