以下是情景。
1。)安装1.0.1.1然后升级到1.0.2.2 ===>这很有效(如预期的那样)
2.)安装1.0.2.2然后降级到1.0.1.1 ===>这不起作用(如预期的那样)
3.)安装1.0.1.1然后安装1.0.1.1 ===>这将进入修复/删除模式(如预期的那样)
4.)安装1.0.1.1然后安装1.0.1.2 ===>它安装得像一个新的,并在控制面板中的添加/删除程序中显示程序两次(我想它应该像3.一样工作)因为,根据我的理解,MSI并不关心产品版本的第四部分)
我做错了吗?
<Product Id="*" Name="My product" Version="$(var.Version)" Language="1033" Manufacturer="My Company" UpgradeCode="MY-UPGRADE-CODE">
<Package Description="My product" Comments="Comments" InstallerVersion="200" Compressed="yes" />
<MajorUpgrade Schedule="afterInstallInitialize" DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." />
答案 0 :(得分:21)
这与WIX文档中提到的一样。您需要在MajorUpgrade元素中将以下属性设置为“是”以处理此方案。阅读突出显示的文本以获取更多详细信息。
AllowSameVersionUpgrades(YesNoType)
当设置为no(默认值)时,MSI允许安装具有相同版本和升级代码(但产品代码不同)的产品,并将其视为两个产品。设置为yes时,WiX会设置msidbUpgradeAttributesVersionMaxInclusive属性,该属性告诉MSI将产品视为与主要升级版本相同的版本。
的 This is useful when two product versions differ only in the fourth version field. MSI specifically ignores that field when comparing product versions, so two products that differ only in the fourth version field are the same product and need this attribute set to yes to be detected.
强> 的
请注意,由于MSI忽略第四个产品版本字段,因此将此属性设置为yes还允许在前三个产品版本字段相同时降级。例如,产品版本1.0.0.1将“升级”1.0.0.2998,因为它们被视为相同版本(1.0.0)。这可能会重新引入严重错误,因此最安全的选择是更改前三个版本字段并省略此属性以获取默认值no。
当AllowDowngrades也为“是”时,此属性不能为“是” - AllowDowngrades已允许两个具有相同版本号的产品相互升级。