2011-11-12 256 views
1

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

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

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

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

+0

你看过http://msdn.microsoft.com/en-us/library/windows/desktop/aa372105(v=vs.85).aspx? – IronMensan

回答

0

找出它,SystemComponent值将其从添加/删除程序列表中隐藏。
由于我找不到任何其他API使用,我只是要枚举注册表。

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

相关问题