API/WMI 查询系统上安装的修补程序和更新的完整列表?

问题描述 投票:0回答:3

之前,已经讨论过如何查询Windows系统上安装的修补程序列表,并建议使用WMI和类

Win32_QuickFixEngineering
来提供信息。然而 MSDN 表明从 Vista 开始,该特定类仅返回修补程序,而不返回通过其他方式安装的更新。

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

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

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

谢谢!

c# windows wmi windows-update hotfix
3个回答
0
投票

据我所知,任何已安装且能够卸载的内容都必须在注册表中注册,网址为

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

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


0
投票

由于缺乏可靠且完整的编程方式来实现此目的,我最终使用了

wmic qfe
命令。


0
投票

无需使用wmi、Windows update api或其他缓慢而复杂的api,您可以直接查看这些数据的来源:

C:/ProgramData/USOPrivate/UpdateStore/store.db

它是一个sqlite数据库,你可以只查询COMPLETEDUPDATES表。

但是,某些修补程序可能不存在于该表中,您可以查看:

C:\Windows\servicing\Sessions\Sessions.xml

它是 xml 文件,其中包含所有已安装更新的历史记录及其状态

© www.soinside.com 2019 - 2024. All rights reserved.