【发布时间】:2020-06-15 09:12:00
【问题描述】:
我们有一个基于 WPF 的外部 UI 应用程序,即 setup.exe,它包装了在 WiX 中开发的 msi。我们要求某些组件/msi 需要多实例支持,有些不需要多实例支持,但所有组件都是单个包的一部分。
我们在构建期间为每个实例预定义了 InstanceID、ProductCode 和 UpdgradeCode。因为动态创建实例 ID 会增加补丁/升级方案的复杂性。
我们希望 Setup.exe 做两件事,
1。它应该查找目标计算机并检测是否已安装任何组件。执行此操作需要产品代码。
2。它应该自动检测 msi 复制到路径中并查找 InstanceTransforms 是否存在于 msi 中。如果找到 InstanceTransforms,那么它应该获取已定义的实例 ID。因为我们不想在 Setup.exe 中保留任何业务逻辑。原因是避免每次更改 msi 时都重新编译 Setup.exe。
现在 Setup.exe 将知道 msi 是否需要实例 ID,基于它将调用 msi 并传递命令行参数。这是一种避免回归的插件机制。
问题: 我们无法从 MSI 检索 InstanceTransforms,可能是因为它不是属性。我们检查了 _Storages 表和属性表,但无法弄清楚。
我们如何在 msi 中检索 InstanceTransforms 元素及其实例定义(InstanceID 和 ProductCode)?
请指教。
@Christopher 画家
【问题讨论】:
标签: wix multiple-instances wix3.7