Використовуйте 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::Метод пошуку.