9

这是场景。

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 一样工作。)因为,从我的理解,微星不关心产品版本的第四部分)

我做错什么了吗?

<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." />
4

1 回答 1

22

这是 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 也为“yes”时,该属性不能为“yes”——AllowDowngrades 已经允许两个具有相同版本号的产品相互升级。

资料来源:WIX 文档

于 2013-10-18T14:24:35.597 回答