使用 WMI 检查 Windows 更新的安装状态

更新页 :
页面创建日期 :

概述

使用 WMI 检查当前 Windows 上安装的更新 (KB)。

KB がインストールされている番号の一覧を表示しています。

操作环境

操作确认环境

窗口版本
  • Windows 7 Ultimate
  • Windows Vista Business
.NET Framework 版本
  • 3.5 SP1
  • 4

必需操作环境

窗口版本
  • Windows 98 或更高版本(但所有未验证)
.NET Framework 版本
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

内容

什么是 KB?

インストールされている更新プログラム(KB)が表示されています。

由于 KB 也用于“KB”或“键盘”等表达式的缩写,因此它不是常用的单词,但更新(如 Windows 安全响应和 Bug 修复)可以用 ID 的首字母缩写来表示“KB”。

每个更新都有一个 ID,并以格式“KBXXXXXX”指定(XXXXXX 是任何数字)。 位数不是固定的。 但是,请注意,并非所有更新都采用此格式。

顺便说一下,此 KB 的最初名称是“Microsoft 知识库”,它与 Microsoft 在 Web 上发布的技术文档的 ID 匹配。例如,如果更新了 KB980218,则相应的技术文档是 http://support.microsoft.com/?kbid=980218“。

查找 KB 安装状态的程序

该示例在 Visual Studio 2010 和 WPF 中进行了介绍,但 KB 检查程序也可用于以前的 Visual 工作室、Windows 窗体和控制台应用。 这一次,您将使用窗口管理集成 (WMI) 检查 KB 的安装状态。

添加引用

「参照設定」を右クリックして「参照の追加」を選択

若要使用 WMI,请使用管理对象搜索器或管理对象类,但若要使用这些类,必须引用系统.管理.dll。

对于 C# 项目,请右键单击解决方案资源管理器中的“引用设置”,然后选择“添加引用”。

参照の追加ダイアログで System.Management を選択して追加しています

当出现“添加引用”对话框时,将显示“。 NET 选项卡,选择系统管理,然后单击“确定”按钮。

如果“系统.管理”已添加到解决方案资源管理器中的引用设置中,则确定。

VB.NET のプロジェクトのプロパティから System.Management の参照を追加しています

对于 VB.NET,打开项目属性,从左侧选项卡单击“浏览”,然后单击右侧的“添加”按钮。 将出现“添加引用”对话框,如上所示,选择“系统.管理”,然后单击“确定”按钮。

如果返回到上一屏幕并将“系统.管理”添加到中心列表中,则“确定”。

此外,让我们从下面的列表中选中“系统.管理”,以跳过程序中的命名空间描述。

此外,它与原始提示无关,但此示例使用字符串生成器类,因此我们还检查了“系统.Text”命名空间。 (仅限 VB.NET)

屏幕

KB チェック実行ボタンと検索結果一覧を表示するためのテキストボックスを配置

此示例中使用的屏幕是一个简单的屏幕,其中包含用于检查 KB 安装的运行按钮和显示结果的文本框。

我在 WPF 中构建了类似的屏幕,但您可以在 Windows 窗体中配置类似的屏幕。

程序

C# 在 ManagementObjectSearcher 代码的开头添加了“”using System.Management;,以减少命名空间(如类)的描述。 VB.NET 指定在项目属性中导入命名空间,因此不需要编写命名空间,但如果未导入命名空间,Imports System.Management则必须添加 。

*C# 和 VB.NET 如果从命名空间(如“System.Management.ManagementObjectSearcher”)描述所有类名称,则不需要上述规范。

C #

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Management; // 追加 (参照から「.NET」より「System.Management」追加)

下面是搜索和列出已安装的 KB 的代码。

C #

this.ResultTextBox.Text = "";

// WMI クエリをセットして管理オブジェクト検索クラスを作成
ManagementObjectSearcher query =
  new ManagementObjectSearcher("Select * From Win32_QuickFixEngineering");

// WMI クエリを使用して管理オブジェクトコレクションを取得
ManagementObjectCollection queryCollection = query.Get();

StringBuilder builder = new StringBuilder();

// コレクションから管理オブジェクトを列挙する
// ここでは HotFixID を取得
foreach (ManagementObject mo in queryCollection)
{
  builder.AppendLine(mo["HotFixID"].ToString());
}

// 取得した KB 一覧をセット
this.ResultTextBox.Text = builder.ToString();

VB.NET

Me.ResultTextBox.Text = ""

' WMI クエリをセットして管理オブジェクト検索クラスを作成
Dim query As ManagementObjectSearcher = _
  New ManagementObjectSearcher("Select * From Win32_QuickFixEngineering")

' WMI クエリを使用して管理オブジェクトコレクションを取得
Dim queryCollection As ManagementObjectCollection = query.Get()

Dim builder As System.Text.StringBuilder = New System.Text.StringBuilder()

' コレクションから管理オブジェクトを列挙する
' ここでは HotFixID を取得
For Each mo As ManagementObject In queryCollection
  builder.AppendLine(mo("HotFixID").ToString())
Next

' 取得した KB 一覧をセット
Me.ResultTextBox.Text = builder.ToString()

第一行中的“ResultTextBox”是一个文本框,用于显示检索结果。

new ManagementObjectSearcher创建托管对象的搜索类的实例,并为参数设置 WMI 查询。 查询的语法几乎等于 SQL 语句,因此请查看 SQL 相关的详细信息。 Win32_QuickFixEngineering表示应用于当前操作系统的更新。

在前面query.Get()指定的 WMI 查询中搜索,并将ManagementObjectCollection结果返回为“”。

由于“ManagementObjectCollection”列出了更新信息,因此 foreachManagementObject 获取“”,并从“热修复 ID”参数写入唯一标识符。

作成されたフォルダ

这将列出更新的 ID,如图所示。

正如您所看到的,它仅在首次运行时运行,但速度很慢。 第二次和以后,它相当快。

System.Management .dll 加载,我不知道是缓慢运行还是缓慢运行 WMI 查询,但这一事实并没有改变,因此,如果您担心等待时间使用,您可能需要异步执行。