2016-09-22 83 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”中安装和更新时,不会发生此问题。需要找出发生这种情况的原因 –