gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 14:36:49 28 4
gpt4 key购买 nike

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

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

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

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

谢谢!

最佳答案

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

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

关于c# - API/WMI 查询系统上安装的修补程序和更新的完整列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12313795/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com