WIX(删除所有以前的版本)

时间:2018-07-18 14:12:25

标签: wix windows-installer major-upgrade

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

- 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

我已经阅读了How to implement WiX installer upgrade?

的全部内容

我使用的代码是:

<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中看过 image

图像上的最新UpgradeCode适用于版本3.0.6.0

1 个答案:

答案 0 :(得分:1)

忽略数字 :从ProductVersion property的MSI SDK文档中摘录:

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.


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

按产品代码卸载 :如果您要提供内部应用程序,我只会得到产品代码列表并在整个公司范围内进行卸载:{{3} }然后可以将您汇编的产品代码列表传递到msiexec.exe /x {productcode} How can I find the product GUID of an installed MSI setup?。只是一个简单的批处理文件。或者,您可以尝试WMI或其他方法之一。

通过升级代码卸载 :您可以使用以下代码检查所有安装版本是否共享相同的升级代码:as explained in section 3 here(可能做)。甚至还有How can I find the Upgrade Code for an installed MSI file?。链接到答案,然后链接到其他几种卸载方式,例如a VBScript version here。还有uninstalling all setups that share the same upgrade code

按产品名称卸载 :您也可以按匹配的产品名称进行卸载。一些示例(VBScript):direct link to actual code to do so (uninstall by upgrade code)。这是一个 .NET DTF卸载功能Is there an alternative to GUID when using msiexec to uninstall an application?(非常简单,需要进行调整以供实际使用)。


某些链接: