首页 > 解决方案 > WIX(删除所有以前的版本)

问题描述

在“添加或删除程序”下,我可以看到五个版本:

- ApplicationName v3.0.4.0
- ApplicationName v3.0.4.18
- ApplicationName v3.0.5.27
- ApplicationName v3.0.5.28
- ApplicationName v3.0.5.29

尝试安装 ApplicationName v3.0.5.30 时,不会删除所有以前的版本。保留的版本是:

- ApplicationName v3.0.4.0
- ApplicationName v3.0.4.18

我已经阅读了有关如何实施 WiX 安装程序升级的所有内容?

我使用的代码是:

<Product Id="*"
   UpgradeCode="$(var.UpgradeCode)"
   Version="$(var.Version)"
   Language="1033"
   Name="$(var.ProductDisplayName) (v$(var.Version))"
   Manufacturer="Unknown">
<Package InstallerVersion="380" Compressed="yes"/>
<Media Id="1" Cabinet="IileServer.cab" EmbedCab="yes" />

<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<Upgrade Id="$(var.UpgradeCode)">
  <UpgradeVersion
  Minimum="0.0.0.0" Maximum="99.0.0.0"
  Property="PREVIOUSVERSIONSINSTALLED"
  IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade>

<InstallExecuteSequence>
  <RemoveExistingProducts Before="InstallInitialize" />
</InstallExecuteSequence> 

我做错了什么?

我还尝试构建版本 v3.0.6.0,安装后我得到了相同的结果。

Versions v3.0.5.X was removed
Versions v3.0.4.X was not uninstalled

UpgradeCode 对于所有版本都是相同的,我查看了 Orca 图像

图像上的最后一个 UpgradeCode 适用于版本 3.0.6.0

标签: wixwindows-installermajor-upgrade

解决方案


忽略数字:从 MSI SDK 文档中提取ProductVersion property

" Note that Windows Installer uses only the first three fields of the product version. If you include a fourth field in your product version, the installer ignores the fourth field...At least one of the three fields of ProductVersion must change for an upgrade using the Upgrade table."


为了摆脱野外安装,有几种方法。

按产品代码卸载:如果您要交付内部应用程序,我只会获取产品代码列表并在整个公司范围内卸载:如何找到已安装 MSI 设置的产品 G​​UID?然后可以将您组装的产品代码列表传递给msiexec.exe /x {productcode} 此处第 3 节中的说明。只是一个简单的批处理文件。或者您可以尝试 WMI,或其他方法之一。

通过升级代码卸载:您可以使用此处的代码检查所有安装版本是否共享相同的升级代码:如何找到已安装 MSI 文件的升级代码?(他们可能会这样做)。这里甚至还有一个 VBScript 版本。抛出一个指向答案的链接,其中我链接到其他几种卸载方式,例如通过卸载共享相同升级代码的所有设置。以及执行此操作的实际代码的直接链接(通过升级代码卸载)

按产品名称卸载:您也可以按产品名称匹配卸载。这里有一些示例(VBScript):使用 msiexec 卸载应用程序时是否有 GUID 的替代方法?. 这是一个.NET DTF 卸载功能卸载程序(非常简单,需要调整以供实际使用)。


一些链接:


推荐阅读