C#查询软件更新历史

C# Querying Software Update History

我正在编写一个 C# 控制台应用程序,它收集有关机器的数据并将其写入外部数据库。有必要收集的信息之一是有关已安装软件的信息。我们有一组特定的软件,我们想了解一下。具体安装了哪些,安装了哪些版本,打了哪些补丁。

我已经通过查询注册表获得了有关安装了哪些软件及其版本的信息。但是,在确定安装了哪些补丁时,我有点困惑。

我知道如果我去 Control Panel -> Programs -> View installed updates 我可以看到我为这些软件安装的补丁(具体来说,它给了我确切的补丁号 - 即补丁 21)。所以,我想要类似的东西。我找到了 WUApiLib 并认为它可以解决我的问题,但是当我查询更新历史时,返回的所有内容都是 Microsoft 对 OS、.NET、Visual Studio 等的更新列表。那里没有提到我应用到我们软件的补丁。

我不太熟悉补丁的工作原理,但我相信补丁使用 msp 文件格式,所以我认为 Windows 应该在某处记录信息。控制面板是怎么得到的?我在哪里可以得到它? HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall 下的注册表项根本没有提到补丁。

因此,经过一番挖掘后,我发现了注册表的不同部分,其中列出了我需要的所有信息。

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products

这包含已安装软件的名称和版本(在 <GUID>\InstallProperties 下)以及为每个软件安装的补丁(在 <GUID>\Patches 下)