使用WIX升级版本

upgrade version using WIX

我使用 WIX 工具集 (3.10) 制作了一个安装程序。我想启用升级,但我做不到。每次我 运行 msi 它都会安装另一个版本。 我不知道出了什么问题。有人可以建议吗?

<Product Id="*"
       Name="$(var.PRODUCTNAME)"
       Language="1033"
       Version="$(var.PRODUCTVERSION)"
       Manufacturer="Manufacturer"
       UpgradeCode="UPGRADE_CODE"
       >
<Package InstallerVersion="200"
         Compressed="yes"
         InstallScope="perMachine" />

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

我为 UpgradeCode 使用了一个 GUID(我想这就是 UPGRADE_CODE 的意思)。

您还可以设置 REINSTALLMODE 属性 来更改您的重新安装行为。

它可能看起来像这样:

<SetProperty Id="REINSTALLMODE" Value="amus" After="FindRelatedProducts">Installed AND REMOVE&lt;&gt;"ALL"</SetProperty>

请注意 a 将重新安装您的产品,而不管安装的版本是什么。但是您可以查找安装程序需要哪些字符。

Value="amus"可以参考微软文档here

AllowSameVersionUpgrades="yes" 可能会解决这个问题。当您测试升级时,您需要始终在安装程序之间更新版本(前 3 个部分之一)或只允许相同版本的升级。

来自 wix website

When set to no (the default), installing a product with the same version and upgrade code (but different product code) is allowed and treated by MSI as two products. When set to yes, WiX sets the msidbUpgradeAttributesVersionMaxInclusive attribute, which tells MSI to treat a product with the same version as a major upgrade.

所以你的安装认为这两个安装是独立的东西,即使它们共享相同的升级代码,这就是为什么你在添加删除程序列表中得到 2 个副本的原因。

除了您的 MajorUpgrade 属性 之外,重要的是您的 UpgradeCode 在未来的版本中不会改变。这可能是问题所在吗?