如何设置 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 对话框设置产品名称和公司名称