c++ - 获取已安装的应用程序列表

标签 c++ windows api com

我正在尝试构建已安装应用程序的列表,类似于控制面板中添加/删除程序列表中的列表。
我试过使用 Win32_Product WMI ClassMsiEnumProducts。 它们都输出非常相似的输出,但都缺少添加/删除程序中的程序。例如,我知道我安装了 Adobe Flash Player,但它不在这些列表中。

我一直试图避免读取注册表,因为我读到过使用一些 API 来检索列表会更好,但到目前为止我发现的方法都没有用。

是否有其他可用的内置 API/COM 方法?还是我应该尝试从注册表中读取所有内容?

还有……
注册表中有些程序不在“添加/删除程序”列表中,例如我安装了 Microsoft Security Essentials。在注册表中有一个卸载 Microsoft Antimalware 的条目,我假设它是 Microsoft Security Essentials 的一部分,但它不在添加/删除程序列表中,我看到没有任何类型的不显示值。 (我想使用某种 API 的部分原因)

最佳答案

如果您想显示与“程序和功能”列表中相同的项目,您只需绑定(bind)到该文件夹​​并询问其内容即可。这是脚本版本:

var shell = new ActiveXObject("Shell.Application");
var programsFolder = shell.Namespace("::{26EE0668-A00A-44D7-9371-BEB064C98683}\\0\\::{7b81be6a-ce2b-4676-a29e-eb907a5126c5}");
var items = programsFolder.Items();
for (var i = 0; i < items.Count; i++) {
 var item = items.Item(i);
 WScript.StdOut.WriteLine(item);
}

这个的 C++ 版本涉及更多的输入,但想法是一样的。

关于c++ - 获取已安装的应用程序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8106478/

相关文章:

windows - 如何在vbs中非持久地改变环境变量

javascript - 使用 Axios 获取 XML 数据

c++ - 宏中使用的模板参数有问题

c++ - 在 C++ 中使用 std::ifstream 读取 ASCII 文本文件

python - Python中的_winreg.CreateKey问题

c# - .Net TimeZoneInfo ID - 它是特定于 Windows 语言的吗?

iphone - iPhone 的共享 API 按钮

android - 获取订阅信息时来自 Google Play Android Developer REST API 的错误 500

c++ - 对类内变量的引用

c++ - 如何遍历字符串中的单词?