【发布时间】:2011-02-27 07:22:45
【问题描述】:
我有一个使用 Wix 安装的主要产品,并且有自己的升级代码
在主要产品的发布之间,我们有时会发布插件来添加或修补某些功能。插件打包在他们自己的 Wix 生成的 .msi 文件中,并带有自己的 UpgradeCodes,并且通常安装附加文件是与主产品分开的文件夹。
我想创建一个新版本的主要产品,其中包含以前在插件中可用的功能。升级到新版本的用户将不再需要该插件,因此最好在升级过程中将其卸载。
当Wix 使用UpgradeCode1 升级产品时,有没有办法让Wix 卸载带有UpgradeCode2 的产品?
===鲍勃回答后更新===
我尝试了多个升级元素,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]')”。我已经尝试通过将属性 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>
【问题讨论】:
标签: wix uninstallation