使用 WUA 檢查 Windows 更新的安裝狀態

更新頁 :
頁面創建日期 :

概述

使用 WUA 檢查目前使用的 Windows 上安裝的更新 (KB)。

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

操作環境

操作確認環境

視窗版本
  • Windows 7 Ultimate
.NET Framework 版本
  • 4

必需操作環境

視窗版本
  • Windows 7(未驗證其他環境)
.NET Framework 版本
  • 4.0(未驗證其他環境)

內容

關於此範例

此示例的目的是確定 Windows 上安裝的 KB,其目的與使用 WMI 檢查 Windows 更新的安裝狀態大致相同。 但是,此示例使用“WUA”而不是 WMI 進行檢查。

有關 KB 的說明,請參閱使用 WMI 檢查 Windows 更新的安裝狀態

什麼是 WUA?

WUA 是“Windows 更新代理”的縮寫,是一組 COM 介面,允許您訪問 Windows 更新和 Windows 伺服器更新服務 (WSUS)。 您可以使用它查看 Windows 上安裝的 KB。

有關 WUA 和使用 WUA 程式設計的詳細說明,請參閱以下連結:

查找 KB 安裝狀態的程式

新增參考 (C#)

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

若要使用 WUA,必須從 COM 引用 WUAPI 2.0 類型庫。

對於 C# 專案,請右鍵按兩下解決方案資源管理員中的“引用設置”,然後選擇“添加引用”。

参照の追加ダイアログで WUAPI 2.0 Type Library を選択して追加しています

當出現“添加引用”對話框時,從“COM”選項卡中選擇“WUAPI 2.0 類型庫”,然後按兩下「確定」 按鈕。

如果「WUApiLib」 已添加到解決方案資源管理器中的引用設置中,則確定。

新增參考(VB.NET)

My Project から開くを選択

對於 VB.NET,請右鍵按兩下解決方案資源管理員中的「我的專案」,然後選擇「打開」。

プロジェクトのプロパティから参照タブを選択し WUAPI 2.0 Type Library の参照を追加しています

打開屬性后,從左側選項卡按下「流覽」,然後按下右側的「添加」按鈕。 將顯示與 C# 相同的「添加引用」對話框,從「COM」選項卡中選擇「WUAPI 2.0 類型庫」 ,然後按下「確定」 按鈕。

WUAPI 2.0 Type Library が追加されていることを確認し、WUApiLib 名前空間をインポートします

如果返回到上一螢幕並將 WUAPI 2.0 類型庫添加到中心清單中,則確定。

此外,讓我們從下面的清單中選中 WUApiLib,以在程式中省略命名空間的說明。

螢幕

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

此範例中使用的螢幕是一個簡單的螢幕,其中包含用於檢查 KB 安裝的運行按鈕和顯示結果的文字框。

我在 WPF 中構建了類似的螢幕,但您可以在 Windows 窗體中配置類似的螢幕。

程式

C# 在 UpdateSession 代碼的開頭添加了“ ”using WUApiLib; VB.NET 指定在專案屬性中導入命名空間,因此不需要編寫它,但如果未匯入命名空間,Imports WUApiLib則必須添加 。

*C# 和 VB.NET 如果從命名空間描述所有類名稱(如“WUApiLib.UpdateSession”),則不需要上述規範。

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 WUApiLib; // 参照から「COM」より「WUAPI 2.0 Type Library」追加

下面是搜索和列出已安裝的 KB 的代碼。

C #

this.ResultTextBox.Text = "";

// アップデートセッション 作成
UpdateSession us = new UpdateSession();

// アップデート検索インスタンス作成
IUpdateSearcher searcher = us.CreateUpdateSearcher();

// 「インストールされているもの」「ソフトウェア」で検索し、結果を取得
ISearchResult result = searcher.Search("IsInstalled=1 and Type='Software'");

StringBuilder builder = new StringBuilder();

// アップデート一覧からタイトル一覧を取得する。
foreach (IUpdate u in result.Updates)
{
  builder.AppendLine("[" + u.Title + "]");
}

builder.AppendLine();

// アップデート一覧から KB の番号だけ取得する。
foreach (IUpdate u in result.Updates)
{
  foreach (string str in u.KBArticleIDs)
  {
    builder.AppendLine(str);
  }
}

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

VB.NET

Me.ResultTextBox.Text = ""

' アップデートセッション 作成
Dim us As New UpdateSession()

' アップデート検索インスタンス作成
Dim searcher As IUpdateSearcher = us.CreateUpdateSearcher()

' 「インストールされているもの」「ソフトウェア」で検索し、結果を取得
Dim result As ISearchResult = searcher.Search("IsInstalled=1 and Type='Software'")

Dim builder As New System.Text.StringBuilder()

' アップデート一覧からタイトル一覧を取得する。
For Each u As IUpdate In result.Updates
  builder.AppendLine("[" + u.Title + "]")
Next

builder.AppendLine()

' アップデート一覧から KB の番号だけ取得する。
For Each u As IUpdate In result.Updates
  For Each str As String In u.KBArticleIDs
    builder.AppendLine(str)
  Next
Next

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

內容如評論所示。

IUpdateSearcher.Search您可以更改方法參數中指定的字串檢索的內容。 有關詳細資訊,請參閱更新搜索器::搜索方法