【问题标题】:Get a list of installed applications获取已安装应用程序的列表
【发布时间】:2011-11-12 18:12:21
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c++ windows api com


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    想通了,SystemComponent 值将其隐藏在“添加/删除程序”列表中。
    由于我找不到任何其他 API 可以使用,所以我将枚举注册表。

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多