如何查找MSI是否启用了InstanceTransforms?

问题描述 投票:0回答:1

我们有一个基于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?)>

请咨询。

@@克里斯托弗·画家

我们有一个基于WPF的外部UI应用程序,即setup.exe,其中包装了在WiX中开发的msi。我们要求某些组件/ msi需要多实例支持,而某些不需要...

wix multiple-instances wix3.7
1个回答
0
投票

我没有完全按照您的问题。通常,您可以使用WiX DTF Microsoft.Deployment.WindowsInstaller库对MSI数据库和MSI API进行查询。您可以查询属性表以获取ProductCode,然后查询已安装的产品以查看是否已安装。要查看MSI是否具有可用的嵌入式转换,您可以查询_Storages流,应用转换,然后还读取其属性。

© www.soinside.com 2019 - 2024. All rights reserved.