wix - 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
解决方案
忽略数字:从 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 设置的产品 GUID?然后可以将您组装的产品代码列表传递给msiexec.exe /x {productcode}
此处第 3 节中的说明。只是一个简单的批处理文件。或者您可以尝试 WMI,或其他方法之一。
通过升级代码卸载:您可以使用此处的代码检查所有安装版本是否共享相同的升级代码:如何找到已安装 MSI 文件的升级代码?(他们可能会这样做)。这里甚至还有一个 VBScript 版本。抛出一个指向答案的链接,其中我链接到其他几种卸载方式,例如通过卸载共享相同升级代码的所有设置。以及执行此操作的实际代码的直接链接(通过升级代码卸载)。
按产品名称卸载:您也可以按产品名称匹配卸载。这里有一些示例(VBScript):使用 msiexec 卸载应用程序时是否有 GUID 的替代方法?. 这是一个.NET DTF 卸载功能:卸载程序(非常简单,需要调整以供实际使用)。
一些链接:
- Wix MajorUpgrade 不会检测产品版本的最后位置
- http://blog.deploymentengineering.com/2010/08/wix-users-exceeding-version-limits.html(这里是异国情调的解决方法)
- Powershell:通过 UpgradeCode 卸载应用程序
- Wix MajorUpgrade 问题(AllowSameVersionUpgrades WiX 概念)
推荐阅读
- java - Spring Boot thymeleaf 无法访问属性
- java - 对于这种方法,Java 中 Python 的 urllib2 代码等价物是什么?
- reactjs - 使用 react-router-dom v4 在 redux 操作中重定向
- dart - Dart DNS 查找 TXT 记录
- javascript - Javascript“like”函数针对数组
- robotframework - \?{argument} 和 ?{argument} 在机器人框架中是什么意思?
- r - 使用同一组中满足条件的第一行设置列值
- chapel - 场地的适当教堂所有权
- javascript - 使用 javascript 压缩/缩小动态生成的 html
- selenium - Xpath / Selenium - 如何获取所有选项