繁体   English   中英

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

[英]API/WMI Query for complete list of hotfixes and updates installed on a system?

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

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

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

抱歉,如果这个讨论应该是先前关于这个问题的任何一个相关问题的讨论,但是我目前的声誉是我可以为这两个问题做出贡献的唯一方法就是提交一个新的答案,这绝对不是正确的方法再问一个这样的问题。

谢谢!

据我所知,任何已安装且可以卸载的东西必须在注册表中注册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

我不确定这是否完全符合你的要求; 但这是我多年来学到的各种各样的东西......

在没有可靠和完整的编程方式来实现这一目标的情况下,我最终使用了wmic qfe命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM