如何获取机器上“未”安装的 MSI 功能列表?

问题描述

我知道 MsiEnumFeatures 是用于检测给定 MSI 安装了哪些功能的 goto API,但我发现它不会返回安装时 InstallLevel 设置为“0”的任何功能时间。

场景:我有一个包含 20 个功能的 MSI:10 个已安装,5 个未选择安装,还有 5 个未安装且不受支持(InstallLevel = 0)。

当我调用 MsiEnumProducts 并遍历功能时,我最终只会返回前 15 个功能

为什么不返回最后5个?是否有任何 API 可以为我提供此功能,或者我是否只需对 File 表运行 sql 查询即可获取所有功能的列表?

解决方法

因为……

MsiEnumFeatures 函数枚举给定产品的已发布功能。

...并且 0 级功能未发布。如果你想知道潜在的功能,你需要查询包。

,

InstallExplorer:WiX 团队的 Bob Arnson 已经回答了,但也许我可以添加一个我刚刚找到的示例。我正在寻找其他东西,但找不到,但这可能会:InstallExplorer。它是一个小的 C++ GUI 应用程序,它列出了已安装的产品。也许看看它,看看它是否满足您的需求 - 至少它是 MSI API 代码的示例。

DTF - Inventory Sample:等等,想点别的。 WiX 的 DTF 组件有一些示例。那里有东西。我认为它的 "Inventory" sample 实际上从 MSI 本身读取功能。我不积极,我已经很长时间没有看过它了。如果它不能编译,也许创建一个全新的 C# 项目并将源文件推到那里,然后再试一次。

DTF 本质上是 Windows MSI API 的托管代码包装器 - 还有一些 - 它是一个很棒的小工具包。在主 WiX 安装目录的“doc”文件夹中找到磁盘上的文档。文件:"DTF.chm""DTFAPI.chm"