wix - 如何查看 MSI 是否启用了 InstanceTransforms?
问题描述
我们有一个基于 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)?
请指教。
@克里斯托弗画家
解决方案
我不完全按照你的问题。通常,您可以使用 WiX DTF Microsoft.Deployment.WindowsInstaller 库对 MSI 数据库和 MSI API 进行查询。您可以查询 Property 表以获取 ProductCode,然后查询已安装的产品以查看它是否已安装。要查看 MSI 是否有可用的嵌入式转换,您可以查询 _Storages 流,应用转换,然后也读取这些属性。
如果您想联系我以获得更详细的咨询,我擅长 WPF/MVVM 开发。
推荐阅读
- kubernetes - 如何在 kubernetes 中将 Node-Labels 继承到 Pod-Labels?
- php - 我需要添加什么代码来截断 3 行之后的文本并在 Wordpress 网站中添加省略号?
- asp.net-core - Serilog 如何在没有任何配置设置的情况下发布到 CloudWatch?
- angular - 如何在ionic4中使用crypto js进行加密/解密?
- watson-studio - 在 Watson Studio Lite 上找不到 Visual Recognition 模块
- html - 如何在 Jaspersoft Studio 中呈现 HTML 表格
- cloud - Azure AD:SaaS-web 应用程序的单租户或多租户
- google-apps-script - 如何使用 Google Apps 脚本过滤列中的数据?
- javascript - 如何在导航时修复 ReactJS 中的两个不同组件,我能够修复一个,但另一个页面正在渲染两个固定组件
- spring - 有没有办法使用 SpringBoot 在两个 EAR 之间同步通信?