使用 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您可以更改方法参数中指定的字符串检索的内容。 有关详细信息,请参阅更新搜索器::搜索方法