使用 WUA 檢查 Windows 更新的安裝狀態
概述
使用 WUA 檢查目前使用的 Windows 上安裝的更新 (KB)。
操作環境
操作確認環境
視窗版本 |
|
.NET Framework 版本 |
|
必需操作環境
視窗版本 |
|
.NET Framework 版本 |
|
內容
關於此範例
此示例的目的是確定 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# 專案,請右鍵按兩下解決方案資源管理員中的“引用設置”,然後選擇“添加引用”。
當出現“添加引用”對話框時,從“COM”選項卡中選擇“WUAPI 2.0 類型庫”,然後按兩下「確定」 按鈕。
如果「WUApiLib」 已添加到解決方案資源管理器中的引用設置中,則確定。
新增參考(VB.NET)
對於 VB.NET,請右鍵按兩下解決方案資源管理員中的「我的專案」,然後選擇「打開」。
打開屬性后,從左側選項卡按下「流覽」,然後按下右側的「添加」按鈕。 將顯示與 C# 相同的「添加引用」對話框,從「COM」選項卡中選擇「WUAPI 2.0 類型庫」 ,然後按下「確定」 按鈕。
如果返回到上一螢幕並將 WUAPI 2.0 類型庫添加到中心清單中,則確定。
此外,讓我們從下面的清單中選中 WUApiLib,以在程式中省略命名空間的說明。
螢幕
此範例中使用的螢幕是一個簡單的螢幕,其中包含用於檢查 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
您可以更改方法參數中指定的字串檢索的內容。 有關詳細資訊,請參閱更新搜索器::搜索方法。