【问题标题】:Windows API equivalent to "WMIC QFE Get"相当于“WMIC QFE Get”的 Windows API
【发布时间】:2012-10-08 11:19:12
【问题描述】:

我是 C++ 新手,目前正在努力在 C++ DLL 中获取 Windows 修补程序/补丁信息。

我评估了以下几种方式:

  1. 通过在 C++ 代码中执行一个子进程并运行wmic qfe get 并读取所有数据。
  2. 通过使用 C++ API 初始化 COM,连接到 Wbem 并执行 select * from win32_quickfixengineering 查询。

除了以上两种方法,

是否有任何直接的 Windows API 可以为我完成所有工作并提供当前安装在机器上的 KB 信息列表?

【问题讨论】:

  • 机器上当前安装的KB列表没有用。例如,如果您想知道是否安装了 Q1234 的修复程序,即使 KB1234 不在已安装的 KB 列表中,答案也可能是“是”。该修复程序可能位于汇总包或服务包中。正确答案不是查询 QFE 列表,寻找 1234,而是询问 WU 是否需要 QFE 1234。
  • 感谢陈先生的快速回复。我完全需要 qfe get 给出的知识库列表。我知道某些 KB 是服务包的一部分的情况,我们可以从操作系统信息中获取该信息。如果编写的任何 API 执行类似于 qfe get,我可以直接在代码中使用,而不是完全从头开始编写。
  • 您尚未解释您将使用此信息的目的,因此尚不清楚这是否是正确的方法。无论如何,您始终可以program directly to WMI。这就是 WMIC 所做的一切。
  • 该信息用于了解本机的补丁信息。

标签: windows winapi visual-c++ wmi-query


【解决方案1】:

您可以使用Windows Update Agent APIIUpdateSearcher 接口。

【讨论】:

  • 您好 RRUZ,感谢您的回复。我查看了 IUpdateSearcher 界面,它类似于执行 select * from win32_quickfixengineering 并遍历结果。甚至执行查询和 IUpdateSearcher 都是通过 COM 完成的。您能否说明执行查询和使用 IUpdateSearcher 之间的区别?哪个实现更好、速度更快并且适用于所有 Windows 平台?
  • @HareeshSarma,前段时间我写了一篇关于这个主题的article,它可以帮助你理解它是如何工作的,代码是在Delphi中,但可以很容易地翻译成C++
  • 太棒了。很棒的文章。我将尝试将其转换为 C++。还有一些问题。 WUA 是否提供所有 Windows 32 位和 64 位版本中的所有更新和修补程序信息以及 64 位所需的任何特定编码?这个 WUA 适用于从 2000 到 2008 R2 的所有服务器 Windows 以及从客户端 Windows XP 到 Windows 8?
  • WUA API 在 X86 和 64 位 Windows 中的工作方式完全相同,并且从带有 SP3 的 Windows 2000 Professional 开始在桌面和服务器 Windows 版本中可用。
  • 嗨 RRUZ,我已经通过 IUpdateSearcher 接口并实现了示例代码来获取 KB 信息。但是我发现了更多的接口 IUpdateSearcher2 和 IUpdateSearcher3,它们有一些额外的选项来搜索基于用户的方法。您能否解释一下这个 IUpdateSearcher(x) 接口在 Windows 机器中搜索的确切位置以获取信息?它是否查找与 wmic qfe 相同的注册表路径或任何其他具有更新信息的特殊文件系统?
猜你喜欢
  • 2022-07-17
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 2010-10-12
  • 2021-05-26
  • 1970-01-01
相关资源
最近更新 更多