在Wix安装程序中如何卸载另一个程序?

6

我已经丢失了旧安装程序的GUID。我使用Orca获得了升级ID,但它仍然无法从程序和功能列表中删除旧版本。我如何使用全新的msi/bootstrapper卸载旧版本?

3个回答

11

如果你需要卸载一个MSI(不是一个引导程序),那么你应该能够使用WIX <Upgrade>元素来卸载它,在其中像这样指定:

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is installed." />

<Upgrade  Id="{YOUR-OTHER-STUFF-GUID-HERE}">
  <UpgradeVersion OnlyDetect="no" Property="OTHER_STUFF_FOUND" Minimum="0.0.0" />
</Upgrade>

如果您需要卸载一些EXE文件而不是MSI,那么据我所知,只有自定义操作是解决方案(通过自定义操作执行卸载命令行)。


2
非常感谢您提供这个宝石,它今天救了我的命(当然是比喻) :) - paracycle
如果您不知道如何查找GUID,以下是方法:https://dev59.com/VV0a5IYBdhLWcg3wzbUU - eddex

1

-利用Windows Installer API:MsiEnumRelatedProducts()获取共享相同UpgradeCode的所有产品列表。

https://msdn.microsoft.com/en-us/library/aa370103(v=vs.85).aspx

这个API返回系统上所有安装了共享相同UpgradeCode的产品的产品代码。
您可能可以在互联网或Windows Installer SDK中看到此用法的示例。
另外,最近有一个相关的问题: WiX-允许手动卸载共享相同UpgradeCode的另一个msi(而不仅仅是在MajorUpgrade期间)以卸载另一个msi -另一种方法是使用新的msi软件包升级旧的msi软件包。

http://wixtoolset.org/documentation/manual/v3/howtos/updates/major_upgrade.html


0
另一种方法是从注册表中读取卸载键 (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall),查找应用程序名称/发布者,并在找到匹配项时执行UninstallString命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接