繁体   English   中英

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

[英]remove program from programs and features when installing newer version msi using wix

我正在使用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元素替换。 这是一个较高级别的抽象,可以简化大部分编写工作。

为了成功进行MajorUpgrade,必须完成几件事:

1)新旧MSI必须具有相同的UpgradeCode GUID。 (尽管从技术上来说,MSI可以通过使用其他UpgradeCode属性来删除不相关的产品,但出于这个问题的目的,我们将忽略它。)

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

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

4)旧MSI和新MSI必须在相同的上下文中安装(每个用户->每个用户或每台计算机->每台计算机)

5)升级表必须正确编写。 使用MajorUpgrade元素可以帮助完成此任务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM