经过一番谷歌搜索后,我想到了一个配置,该配置应允许我仅安装软件包的较新版本(确实如此),同时替换已安装的较旧版本(并非如此)
我的wxs文件如下:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*"
Name="Gdml File Viewer" Language="1033"
UpgradeCode="5fb07c15-32a5-4b8a-9794-e4425bfc2eea"
...>
<Package InstallerVersion="200"
Compressed="yes"
InstallScope="perMachine" Platform="x64" />
<MajorUpgrade Schedule="afterInstallValidate"
DowngradeErrorMessage="A later version of [ProductName] is already installed"
AllowSameVersionUpgrades="no"
AllowDowngrades="no" />
...
正如预期的那样,它确实允许我安装较新的版本,但未卸载较旧的版本。它仍然显示在“应用和功能”列表中:
(另一个实例的版本为2019.14.181.35181)
答案 0 :(得分:2)
主要升级失败 :当您在“添加/删除程序”中看到两个条目时,主要升级失败(通常)。
Config :您需要修复Upgrade table的配置。默认升级表的最小WiX标记-具有正常参数(看起来不错,请参见下面的屏幕截图)-只是:
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
悬空版本 :您的WiX标记也可能很好,并且您有一个悬空的较早版本,但从未正确配置,如果这样卸载手动重试,或尝试使用干净的虚拟机。
安装上下文 :MSI文件可以按用户或计算机安装。如果按用户安装,然后按计算机安装,它将不会检测到以前的版本。您的软件包中是否有对ALLUSERS的硬编码引用?
ProductVersion :产品版本中的前3个数字中可能没有一个或多个(第四个字段被忽略)。
其他详细信息 :还有一些需要记住的事情:
主要升级本质上是对旧版本的卸载,以及对新版本的安装,其中包含用于执行操作的顺序的许多计划选项(先安装新版本,然后卸载旧版本,反之亦然)
如上所述,您还可能在包装盒上安装了混乱的较旧版本,但配置不正确,或者发生了一些X-Files废话,导致升级失败。发生。
WiX学习曲线 :建议使用一些示例来帮助加快学习过程。唯一真正有用的东西吗? Here are some WiX Quick Start Suggestions。那里有示例链接。
最小WiX样本 :有一个旧样本:Transparent Aluminum。本质上是如何使用Votive创建基于WiX的安装程序的演练。它包括一个主要的升级元素。我相信这种简单的配置可以为您寻求的降级提供保护:
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
查看产生的Upgrade table:
测试用例 :使用“透明铝”作为测试项目,您可以尝试执行以下步骤来使升级工作正常进行:
*
,以便为每个版本(“ <Product Id="*" ..."
)自动生成新的ProductCode。Visual Studio
中右键单击WiX项目,然后选择 Open Folder in File Explorer
。进入 bin
和 Debug
或 Release
。<Product Id="*" ... Version="2.0.0"
高级 :这是使用便捷元素 "MajorUpgrade"
的组合来配置主要升级的高级方法的演示和较旧的 "Upgrade"
元素(可让您更精细地控制生成的Upgrade表):
Adding entries to MSI UpgradeTable to remove related products
这里是仅使用较旧的Upgrade元素导致更多工作的示例,但可以完全控制Upgrade表:Major Upgrade - "The Old, Manual Way"。
链接 :