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



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

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

 <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元素替换。它是一个更高层次的抽象,简化了大部分的创作。

要想实现一次成功的MajorUpgrade,必须做到以下几点:

1)新旧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必须安装在相同的上下文中(Per User->Per User或Per Machine ->Per Machine)

5)升级表必须正确编写。可以使用MajorUpgrade元素来辅助。

相关内容

  • 没有找到相关文章

最新更新