【问题标题】:API/WMI Query for complete list of hotfixes and updates installed on a system?API/WMI 查询系统上安装的修补程序和更新的完整列表?
【发布时间】:2012-09-07 07:38:01
【问题描述】:

以前,如何查询安装在Windows系统上的修补程序列表是discussed,建议使用WMI和Win32_QuickFixEngineering类提供信息。但是MSDN 表示,从 Vista 开始,这个特定的类只返回修补程序,而不是通过其他方式安装的更新。

An older question 讨论了使用这个类来获取安装的更新,表明作者也不满意使用它,因为我上面描述的限制。不幸的是,正如对已接受答案的评论所指出的那样,使用 Windows 更新代理 API 的替代解决方案仍会指示已安装修补程序,即使它随后被删除(它正在查询安装历史记录,而不是当前安装的更新) .

有人知道如何在 C# 中(通过 WMI 或其他 API)获取系统上安装的更新和修补程序的完整列表,其中不排除可能安装更新的某些方式,并且不会返回随后被删除的更新?从本质上讲,我使用的数据集与“查看已安装的更新”窗格下的“程序和功能”中可用的数据集相同。

抱歉,如果本应针对之前查看此问题的任何一个链接问题进行讨论,但以我目前的声誉,我可以为这两个问题做出贡献的唯一方法是提交一个新的答案,这绝对不是提出诸如此类的进一步问题的正确方法。

谢谢!

【问题讨论】:

  • 在命令行尝试 systeminfo.exe。
  • 既然您提出了systeminfo.exewmic qfe get Hotfixid 是从控制台获取信息的更简单方法,或者wmic qfe 提供了更完整的摘要。但是,我希望能够以编程方式访问此信息。如果没有更完整的注册表或基于 API 的列表,我可能会求助于解析终端的输出。
  • 谢谢,但您应该注意这是我上面问题中的第三个链接,那里讨论的方法的问题在原始问题和我的摘要中突出显示。
  • 我尝试在 C++ 中使用Windows Update Agent API 来检索已安装的更新。 WUA API 有助于通过编程检索数据。我认为它也应该在 C# 中得到支持,但我从未在 C# 中尝试过。我还在努力寻找 WMIC QFE GET 和 WUA API 之间的最佳方式。如果您有任何信息,请添加您的 cmets。

标签: c# windows wmi windows-update hotfix


【解决方案1】:

据我所知,任何已安装和能够卸载的东西都必须在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 的注册表中注册。看来子项名称 KB999999 是为系统更新(修补程序或服务包)保留的。更新的内容将在名为 ParentKeyName 的子项中包含一个 REG_SZ 值,该值链接到它更新的注册表项。

例如,我有 SQL Server 2008 的 Service Pack 1,因此,我在注册表中有一个子项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\KB968369。它有一个名为 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\KB968369\ParentKeyName 的 REG_SZ 值,其值为“Microsoft SQL Server 10 Release”。因为我安装了 SQL Server 2008(因为 KB968369 是它的 SP),所以我还有一个 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft SQL Server 10 Release,它是 ParentKeyName 链接。

您可以从 ReleaseType REG_SZ 值判断更新的类型。例如,KB968369 安装的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\KB968369\ReleaseType 值为“ServicePack”

我假设只有可以卸载的更新在Uninstall 键下注册。还有HKEY_LOCAL_MACHINE\Software\Classes\Installer\Patches 注册表项(在此处引用:http://support.microsoft.com/kb/971187)似乎详细说明了各种系统更新。

显然还有一个您可以实例化和查询的 Microsoft Update 对象。此处详细介绍了一个示例:http://msmvps.com/blogs/athif/archive/2005/11/20/76035.aspx

我不确定这是否完全满足您的需求;但这是我多年来学到的一些不同的东西......

【讨论】:

  • 谢谢,这是一个有用的信息集合,尽管不幸的是,这些注册表项实际上都没有包含对我在全新 Win7 安装中测试的特定修补程序的引用。查看另一台安装了更多东西的机器,我可以看到与各种修补程序和更新相关的信息,因此似乎有些信息存储在那里。
【解决方案2】:

由于没有可靠且完整的编程方式来实现这一点,我最终使用了wmic qfe 命令。

【讨论】:

    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    相关资源
    最近更新 更多