如何设置 Wix 引导程序安装的产品代码

Posted

技术标签:

【中文标题】如何设置 Wix 引导程序安装的产品代码【英文标题】:How to set product code of Wix bootstrapper install 【发布时间】:2012-09-05 18:12:21 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

捆绑包的工作方式与产品不同。它不使用 msiexec 来卸载,至少不公开。

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

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

Passing command line args to MSI from WiX bundle

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

它将是这样的:“C:\ProgramData\Package Cachemy GUID\ExchangeBootStrapper.exe”/uninstall

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于如何设置 Wix 引导程序安装的产品代码的主要内容,如果未能解决你的问题,请参考以下文章

WiX-Bootstrapper - 为 UAC 对话框设置产品名称和公司名称

WiX 引导程序创建的安装程序未启动

WiX - 如何防止引导程序自行安装;只安装链式包

Wix Burn:自定义引导程序升级,但与旧版本并排安装

如何防止 wix 自定义引导程序卸载 UI 在升级过程中显示

如何在升级过程中运行捆绑包时,如何在WIX(Windows安装程序xml)引导程序项目中将按钮文本更改为“升级”?