使Wix在执行升级时卸载旧插件

时间:2010-06-03 12:52:20

标签: wix uninstall

我有一个使用Wix安装的主要产品,并且有自己的UpgradeCode

在主要产品的两个版本之间,我们有时会发布添加或修补某些功能的插件。这些插件使用自己的UpgradeCodes打包在自己的Wix生成的.msi文件中,并且通常安装附加文件是主产品的单独文件夹。

我想创建主要产品的新版本,其中包含以前在插件中提供的功能。升级到新版本的用户将不再需要插件,因此在升级过程中将其卸载会很不错。

使用UpgradeCode1升级产品时,是否有办法让Wix使用UpgradeCode2卸载产品?

=== Bob回答后更新===

我尝试了多个升级元素并且Wix代码编译正常,但安装程序无法正常工作

当我双击.msi时,我立即得到一个错误对话框,说“意外错误......错误代码是2711”

根据Microsoft的Windows Installer错误消息页面,错误2711表示“在功能表中找不到指定的功能名称('[2]')。”

事件查看器列出了MsiInstaller的错误: “安装程序在安装此软件包时遇到意外错误。这可能表示此软件包存在问题。错误代码为2711.参数为:{6BEC2276-3211-4E5F-9EF0-2E64B92DE3F4},”

guid是我要卸载的产品的正确ProductCode。 msiexec / uninstall {6BEC2276-3211-4E5F-9EF0-2E64B92DE3F4}成功完成卸载。

我猜猜guid之后的2个逗号之间的空格是“功能名称('[2]')”,找不到。我已经尝试通过向元素添加属性RemoveFeatures =“PlugInFeatureId”手动添加它,但仍然得到相同的结果。

我遗漏了一些让安装程序构建应删除的功能列表的内容?

  

...

<!--Upgrade the main application-->
<Upgrade Id='$(var.UpgradeCode)'>
  <UpgradeVersion OnlyDetect='no' Property='PATCHFOUND'
    IncludeMinimum='yes' Minimum='1.0.1' Maximum='$(var.BuildVersion)' IncludeMaximum='no'/>
</Upgrade>

<!--Remove the old plugin-->
<Upgrade Id='$(var.PluginUpgradeCode)'>
    <UpgradeVersion OnlyDetect='no' Property='REMOVE' IncludeMinimum='yes' Minimum='1.0.0' Maximum='15.0.0' IncludeMaximum='yes'/>
</Upgrade>

<UIRef Id="WixUI_ErrorProgressText" />

<InstallExecuteSequence>
  <FindRelatedProducts  Before="LaunchConditions" />
  <RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>

1 个答案:

答案 0 :(得分:0)

是的,只需将其添加为具有正确UpgradeVersion子级的第二个Upgrade元素。