Використовуйте WUA для визначення стану установки оновлень Windows
зведення
Використовуйте WUA для перевірки наявності оновлень (в КБ), які встановлені на Windows, яку ви зараз використовуєте.
Операційне середовище
Середовище перевірки роботи
Версія для Windows |
|
Версія фреймворку .NET |
|
Необхідні системні вимоги
Версія для Windows |
|
Версія фреймворку .NET |
|
речовина
Про цей зразок
Мета даного зразка - визначити КБ, яке встановлено на Windows, а мета практично така ж, як і "Використовувати WMI для визначення стану установки оновлень Windows". Однак цей зразок перевіряється за допомогою "WUA" замість WMI.
Опис бази знань описано в розділі "Використання WMI, щоб дізнатися, як інсталюються оновлення Windows", тому перевірте там.
Що таке WUA?
WUA розшифровується як «Агент оновлення Windows» і являє собою набір COM-інтерфейсів, що дозволяють отримати доступ до Windows Update і Windows Server Update Services (WSUS). Ви можете використовувати його, щоб визначити, яке КБ встановлено на Windows.
Детальне пояснення WUA та програмування з WUA дивіться за наступними посиланнями:
- API агента оновлення Windows
- Чи є спосіб отримати список всіх оновлень, які були додані на мій комп'ютер?
- IUpdateSearcher::Метод пошуку
Програми, які шукають стан інсталяції КБ
Додавання посилань (C#)
Щоб використовувати WUA, ви повинні посилатися на бібліотеку типів WUAPI 2.0 від COM.
Для проектів C# клацніть правою кнопкою миші «Посилання» з «Провідника рішень» і виберіть «Додати посилання».
Коли з'явиться діалогове вікно Додавання посилання, виберіть бібліотека типів WUAPI 2.0 на вкладці COM і натисніть кнопку OK.
Добре, якщо "WUApiLib" додано до довідкових налаштувань Solution Explorer.
Додавання посилання (VB.NET)
Для VB.NET клацніть правою кнопкою миші пункт Мій проект у Провіднику рішень і виберіть команду Відкрити.
Коли властивості відкриються, натисніть "Огляд" з вкладки зліва, натисніть кнопку Додати праворуч. Як і в C#, відображається діалогове вікно «Додати посилання», тому виберіть «Бібліотека типів WUAPI 2.0» на вкладці «COM» і натисніть кнопку OK.
Якщо ви повернетеся до попереднього екрана і додасте "Бібліотеку типів WUAPI 2.0" до середнього списку, це нормально.
Крім того, давайте відзначимо "WUApiLib" зі списку нижче, щоб пропустити опис простору імен в програмі.
Сцени
Екран, який використовується в цьому зразку, являє собою простий екран з кнопкою виконання для перевірки стану установки КБ і текстовим полем, що відображає результати.
Я роблю це в 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」追加
Нижче наведено код, який шукає та перераховує встановлений КБ.
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
Ви можете змінити те, що ви отримуєте за допомогою рядка, який ви вказали як аргумент методу. Для отримання додаткової інформації дивіться IUpdateSearcher::Метод пошуку.