Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/npm/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用wix安装较新版本的msi时,从程序和功能中删除程序_Wix_Windows Installer - Fatal编程技术网

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

使用wix安装较新版本的msi时,从程序和功能中删除程序,wix,windows-installer,Wix,Windows Installer,我正在使用WIX创建安装程序msi。 我的旧应用程序已安装在计算机上。当我安装新版本的应用程序时,它会删除旧版本的所有文件和程序集,并放置新版本的文件和程序集,但在“控制面板”的“程序和功能”中会显示旧版本和新版本 我正在使用以下代码进行升级 <Upgrade Id="$(var.UpgradeCode)"> <UpgradeVersion Minimum="$(var.ProductVersion)" IncludeMinimum="no" OnlyDetect="ye

我正在使用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>

1.
新产品发现
新产品发现

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

这意味着您的主要升级无法工作。FindRelatedProducts找不到旧版本,因此REmoveExistingProducts无法工作。对于WiX的最新版本,您可以删除大量这类代码,并用较新的MajorUpgrade元素替换它。这是一个更高层次的抽象,简化了许多创作

为了成功进行主要升级,必须进行以下几项工作:

1) 旧MSI和新MSI必须具有相同的升级代码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元素对此进行帮助。

谢谢Christopher,它正在工作。我有一些旧版本的应用程序,但我不知道他们的升级代码,所以我们如何用新的升级应用程序。正如您在第1点中提到的,从技术上讲,MSI可以通过使用额外的UpgradeCode属性删除不相关的产品。请帮我解决这个问题。你有旧版本的副本吗?如果是这样,请使用ORCA查看它的升级代码。如果没有,您需要真正检查您的CM/发布实践。如果您获得了升级代码,请在新的MSI中使用该升级代码和基于旧版本的适当版本范围编写一个额外的升级元素。@ChristopherPaint:我提到了前4点。第5点我还应该包括什么。我的升级代码元素如下:
成功更新后,我在cntrol面板中看到两个程序,v-1.4.8.0和1.4.9.0请给我发送电子邮件verbose install.log和Upgrade.log