wix - 使用 wix 安装较新版本的 msi 时从程序和功能中删除程序

标签 wix windows-installer

我正在使用 WIX 创建安装程序 msi。 当我安装较新版本的应用程序时,我的旧应用程序已安装在计算机上,然后它会删除旧版本的所有文件和程序集,并放置较新版本的文件和程序集,但在控制面板的程序和功能中显示旧版本和新版本。

我正在使用以下代码进行升级

 <Upgrade Id="$(var.UpgradeCode)">
  <UpgradeVersion Minimum="$(var.ProductVersion)" IncludeMinimum="no" OnlyDetect="yes" Language="!(loc.lcid)" Property="NEWPRODUCTFOUND"/>
  <UpgradeVersion Minimum="1.0.0.0" IncludeMinimum="yes" Maximum="$(var.ProductVersion)" IncludeMaximum="no" Language="!(loc.lcid)" Property="UPGRADEFOUND"/>
</Upgrade>

 <CustomAction Id="PreventDowngrading" Error="!(loc.CustomAction_PreventDowngrading)"/>

<InstallUISequence>
  <Custom Action="SetWindowsTypeProp" Before="FindRelatedProducts">1</Custom>
  <!--Custom Action="SetPresenceProperties" After="SetWindowsTypeProp">1</Custom-->
  <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
</InstallUISequence>


<InstallExecuteSequence>
  <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
  <RemoveExistingProducts Before="InstallInitialize"/>
</InstallExecuteSequence>

请帮助我如何从程序和功能中删除条目

最佳答案

这意味着您的 MajorUpgrade 无法正常工作。 FindRelatedProducts 找不到旧版本,因此 REmoveExistingProducts 不起作用。对于 WiX 的最新版本,您可以删除大量此类代码并将其替换为较新的 MajorUpgrade 元素。这是一个更高层次的抽象,可以简化大部分创作工作。

为了成功进行主要升级,必须满足以下条件:

1) 旧 MSI 和新 MSI 必须具有相同的 UpgradeCode GUID。 (尽管 MSI 在技术上可以通过使用额外的 UpgradeCode 属性来删除不相关的产品,但出于本问题的目的,我们将忽略这一点。)

2) 旧版和新版 MSI 必须具有唯一的 ProductCode GUID。

3) 新的 MSI 必须具有更高版本的 ProductVersion 属性。请注意,仅评估前 3 个数字。 (1.2.3 -> 1.2.4 有效,1.2.3.4 -> 1.2.3.5 无效)

4) 旧 MSI 和新 MSI 必须安装在同一上下文中(每用户 -> 每用户或每机器 -> 每机器)

5) 升级表必须正确编写。使用 MajorUpgrade 元素来协助完成此操作。

关于wix - 使用 wix 安装较新版本的 msi 时从程序和功能中删除程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22504615/

相关文章:

在 Burn 中测试安装失败

wix - WIX-Installer MSI Publisher未知

visual-studio - WiX:多个 MSI 文件?

installation - 如何从 WiX 脚本更改事件日志属性?

c++ - 包含C++ Builder Windows服务的Wix安装程序包

xml - 强制执行注册表值引用的最低 DLL 版本

bitmap - WiX 无法正确渲染图像

iis - WiX 在创建新网站之前删除默认 IIS 网站

Wix/MSI - 如何避免安装相同的 MSI 两次

visual-studio-2010 - 包括 c++ 作为 pre-req,但说 "A new version already exists"