3

我正在使用引导程序来检查是否存在,并在需要时安装一组 3rd 方产品安装。然后它会安装我的产品。我想包括一个完整安装的卸载快捷方式,而不仅仅是我的产品。但是,为此,我需要能够为引导程序设置产品代码,然后在我的卸载快捷方式中引用它:

<ShortcutId="UninstallShortcut" Name="Uninstall My Product" 
   Description="Uninstalls My Product"Target="[System64Folder]msiexec.exe" 
   Arguments="/x [MyBootStrapperProductCode]" Icon="MainApp.ico"/>

我正在使用标准的 Wix 引导程序,但我在 Bundle 元素中看不到任何可以让我设置产品代码的内容。

或者,我可以阻止引导程序在添加/删除程序中留下对自身的引用吗?第 3 方组件是永久部署。

4

2 回答 2

3

Bundle 的工作方式与 Product 不同。它不使用 msiexec 来卸载,至少不公开。

为了为 BUNDLE 创建 UNISTALL 快捷方式,您需要一些巧妙的技巧。免责声明:仅用于开发/内部使用。

第一的; 您需要使用以下方法将 UpgradeCode 传递给您的 MSI:

将命令行参数从 WiX 包传递给 MSI

之后,在您的 MSI 文件中,您可以尝试搜索与您的 UpgradeCode 相等的注册表值 BundleUpgradeCode。如果你找到了 value 所在的文件夹,你可以提取 UnistallString 并直接执行它(使用 CustomAction)。

它将是这样的:“C:\ProgramData\Package Cache{my GUID}\ExchangeBootStrapper.exe”/uninstall

我个人还没有实现它,但是找不到任何其他解决方法来解决这个问题并想出了这个。

于 2013-11-07T15:46:58.190 回答
1

我迟到了,但至少记录在案。据我了解,燃烧链中的产品是独立处理的。所以卸载确实如此。这意味着您不需要整个捆绑包的代码。捆绑链中各个 Msi 文件的代码将用于卸载。至于 3d 派对的永久安装,则有相应的永久属性。这一切在 Ramirez N. WiX 3.6 指南的最后两章中都有很好的描述。

于 2020-02-07T09:51:23.710 回答