据我所知,任何已安装和能够卸载的东西都必须在注册表中注册,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
“Microsoft SQL Server 10 Release”的 REG_SZ 值。因为我安装了 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
我不确定这是否完全满足您的需求;但这是我多年来学到的一些不同的东西......