2009-11-12 44 views
3

我正在使用WiX創建可升級的安裝程序,在安裝新版本之前需要完全刪除現有程序。我有文件升級,並補充說,新版本應該是,但我剩下2個程序在添加/刪除程序屏幕的實例。以下是我如何刪除所有內容的示例。使用WiX升級後的2個程序實例

<Product Id="064e9bca-dcf5-412d-9a8f-dafec3bd3406" Name="testInstall" Language="1033" Version="1.0.14" Manufacturer="testInstall" UpgradeCode="5dd5747f-c598-4133-8c7d-252ae3dee8a5"> 

<Package InstallerVersion="301" InstallPrivileges="elevated" InstallScope="perMachine" Compressed="yes" /> 

<Upgrade Id="5dd5747f-c598-4133-8c7d-252ae3dee8a5"> 
    <UpgradeVersion Minimum="1.0.0" 
        IncludeMinimum="yes" 
        Maximum="1.0.13" 
        OnlyDetect="no" 
        Property="OLDERVERSIONBEINGUPGRADED" /> 
</Upgrade> 

<InstallExecuteSequence> 
    <RemoveExistingProducts After="InstallInitialize"/> 
</InstallExecuteSequence> 

任何可以提供的幫助將不勝感激。

回答

5

每次你想創建一個新的更新包,同時改變的ProductVersion和ProductGUI:

<?define ProductVersion="1.0.76"?> 
<?define ProductGUI="945C22A0-BB37-4F7D-9B28-2F02491A0698"?> 

<Upgrade Id="b14563a6-db4f-451c-8b9d-03e480687290"> 
    <UpgradeVersion OnlyDetect='yes' Property='NEWERVERSIONDETECTED' Minimum='$(var.ProductVersion)' IncludeMinimum='no' /> 
    <UpgradeVersion Minimum="1.0.0" IncludeMinimum="yes" Maximum="$(var.ProductVersion)" Property="OLDERVERSIONBEINGUPGRADED" /> 
</Upgrade> 

... 

<InstallExecuteSequence> 
    <RemoveExistingProducts After="InstallValidate" /> 
    ... 
</InstallExecuteSequence> 

注意:使用你自己的GUID升級/編號,當然。

+1

非常感謝你確認了我的理論。但我發現的其中一件事是,其中一個文件在應該被刪除時並未從舊版本中刪除。你知道任何一個文件在所有其他文件被刪除時會被掛起的原因嗎?我發現這是因爲它仍然附加到舊版本的原因,所以版本仍然在技術上安裝。 – 2009-11-12 16:49:24

+0

Windows安裝程序爲每個由多個MSI安裝的文件保留一個計數器。只有在計數回到0時纔會刪除該文件,也就是說,兩個MSI都被卸載。 – Nestor 2009-11-12 17:00:15