在“添加或删除程序”下,我可以看到五个版本:
- 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
答案 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?(非常简单,需要进行调整以供实际使用)。
某些链接: