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

时间:2011-11-12 18:12:22

标签: c++ windows api com

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

我一直在努力避免阅读注册表,因为我读过最好使用一些API来检索列表,但到目前为止我找到的方法都没有用。

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

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

2 个答案:

答案 0 :(得分:2)

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

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 ++版本涉及更多的打字,但想法是一样的。

答案 1 :(得分:0)

想出来,SystemComponent值将其隐藏在添加/删除程序列表中。
由于我找不到任何其他API,我只想枚举注册表。