问题描述
我们一直在 wix 3.11.1.2318 中使用 MajorUpgrade
元素,但我们的安装程序没有正确升级。它不会删除文件,而是在添加/删除程序中留下一个额外的条目。在我们的构建过程中,我们将 Version="0.0.0.0" 切换为当前版本。
以下是显示我们使用情况的简化示例:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" >
<Product Id="*" Name="My Product" Language="1033" Version="0.0.0.0" Manufacturer="MyCompany"
UpgradeCode="{B55B9CB0-BA28-4BB3-834B-6075AD5D45E4}">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<UIRef Id="WixUI_ErrorProgresstext" />
<!-- Specify UI -->
<Property Id="WIXUI_INSTALLDIR" Value="INSTALL_FOLDER" />
<Property Id="RestoreFiles" Value="INSTALL_FOLDER" />
<MajorUpgrade AllowDowngrades="no" AllowSameVersionUpgrades="yes" DowngradeErrorMessage="!(loc.NewerVersionInstalled)" />
</Wix>
我查看了我们的 msi 中的升级表,其中一个条目将 MinVersion 设置为我们构建的版本,并且没有最大版本。 另一个条目将 MaxVersion 设置为我们刚刚构建的版本,并且没有最小版本。
我认为将 MinVersion 设置为我们当前的版本后,我们将无法删除文件,所以我查看了 在 Upgrade 元素上并替换 MajorUpgrade 元素。
<!--
<MajorUpgrade AllowDowngrades="no" AllowSameVersionUpgrades="yes" DowngradeErrorMessage="!(loc.NewerVersionInstalled)" />
-->
<Upgrade Id="{B55B9CB0-BA28-4BB3-834B-6075AD5D45E4}">
<UpgradeVersion Minimum="1.0.0"
IncludeMinimum="yes"
OnlyDetect="no"
Maximum="0.0.0.0"
IncludeMaximum="no"
Property="OLDVERSIONFOUND" />
</Upgrade>
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>
MajorUpgrade 有没有办法设置最低版本? 如果没有设置最低版本的方法,我应该继续升级吗? 什么可能导致第二个条目?
解决方法
日志:请确保创建 a proper verbose log file 以便更好地了解正在发生的事情。
重大升级:之前的一些回答:
- Here is a list of common causes of failed major upgrades(请先浏览列表)
- The use of both legacy and modern constructs to implement major upgrades。
- Annotated WiX source showing old style major upgrades constructs in use
您描述的升级设置对于 WiX 来说听起来很正常。我假设您的构建过程成功地替换了占位符 0.0.0.0(我假设您搜索并替换它)。您也可以使用 WiX 变量并将值传入,但那是另一回事了。
悬垂版本?:您确定在“添加/删除”中没有未删除的悬垂版本,因为它是测试版本或类似版本那? Try generating a list of installed packages。上一个链接是用于创建小型 HTML 报告的脚本,您可以 try this simpler script 以 *.csv 格式创建输出(您可以将其导入 Excel 并按名称列排序以轻松查找重复项)。尝试安装在干净的虚拟机上以确保。只需要验证事实并非如此 - 可能未经验证并成为原因的事情之一。
升级表:以下是升级表示例。请注意,第一个条目是针对真正的主要升级。它将检测所有低于指定的最大版本的版本。如果您的版本已安装,则无需升级。因此,我们不需要 max 高于我们安装的当前版本。事实上,如果您尝试安装的版本应该进入“维护模式” - 这会显示您已安装的功能列表以及您尚未安装的所有功能。
第二行是为了防止用比您正在运行的安装程序更低的版本覆盖更高的现有安装版本。