Wix Major升级问题

Posted

技术标签:

【中文标题】Wix Major升级问题【英文标题】:Wix MajorUpgrade problems 【发布时间】:2013-10-18 02:54:34 【问题描述】:

这里是场景。

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

我做错了吗?

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

【问题讨论】:

另见related question。 【参考方案1】:

这是 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 Documentation

【讨论】:

不错的 Isaiah4110。

以上是关于Wix Major升级问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 WIX 升级数据库?

wix 生成新的升级代码

wix 安装程序 - 支持升级和同时安装多个

WiX 刻录包安装程序 - 升级安装时未更新 ExePackage

Wix Custom BA 正确处理升级

在 WIX 升级期间重新启动 Windows 服务