我有一个使用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>
答案 0 :(得分:0)
是的,只需将其添加为具有正确UpgradeVersion子级的第二个Upgrade元素。