2016-09-22 88 views
0

我想在安裝更高版本的MSI之前/在安裝更高版本的MSI之前刪除/卸載預先安裝的較低版本MSI。我的產品代碼始終是唯一的,升級代碼始終是相同的。在WIX中正確安裝更高版本的MSI

(我不希望允許降級安裝。)

但是,當我安裝一個更高的產品版本的MSI,它被安裝,但添加/刪除爲新安裝和之前安裝的MSI程序項仍然存在。如何解決這個問題?下面是我的代碼

<Product Id="*" Name="MyApp" Language="1033" Version="1.11.1111" UpgradeCode="00000000-8030-4B76-8F3A-8B8BB1000000"> 
<Package InstallerVersion="200" Compressed="yes" Platform="x86" /> 

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." AllowDowngrades="no" Schedule="afterInstallInitialize"/> 

<Upgrade Id="{00000000-8030-4B76-8F3A-8B8BB1000000}"> 
    <UpgradeVersion OnlyDetect="no" Maximum="99.0.0.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMaximum="no"/> 
    <UpgradeVersion OnlyDetect="yes" Minimum="1.0.0.0" Property="NEWERPRODUCTFOUND" IncludeMinimum="no"/> 
</Upgrade> 

回答

1

正如你由此可以看出:

http://www.joyofsetup.com/2010/01/16/major-upgrades-now-easier-than-ever/

的MajorUpgrade元素替換升級的元素。您已指定了兩種升級類型,可能會導致一些問題。

如果版本在前三個字段中遞增,則UpgradeCode是相同的,並且ProductCode是新的,那麼導致失敗(並且獲得兩個條目安裝)的最可能原因是前一個是perUser(或perMachine),你的升級是相反的。主要升級必須處於相同的環境中。

+0

那麼,這是否意味着產品標籤中的Id也應該是靜態的? –

+0

你說什麼對升級有好處。實際的問題是,如果安裝和升級是爲當前用戶完成的,它會複製ARP條目。當我在範圍「ALLUSERS = 1」中安裝和更新時,不會發生此問題。需要找出發生這種情況的原因 –