使用 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 查詢,但這一事實並沒有改變,因此,如果您擔心等待時間使用,您可能需要異步執行。