Використання WMI для визначення стану інсталяції оновлень Windows

Сторінка оновлюється :
Дата створення сторінки :

зведення

Використовуйте WMI для перевірки наявності оновлень (у поданні KB), інстальованих у windows, яка зараз використовується.

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

Операційне середовище

Середовище перевірки роботи

Версія для Windows
  • Windows 7 Ultimate
  • Windows Vista Бізнес
Версія фреймворку .NET
  • 3.5 пакет оновлень 1 (SP1)
  • 4

Необхідні системні вимоги

Версія для Windows
  • Windows 98 або новішої версії (але не всі підтверджено)
Версія фреймворку .NET
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

речовина

Що таке КБ?

インストールされている更新プログラム(KB)が表示されています。

KB також використовується як абревіатура для виразу "кілобайт" або "клавіатура", тому я не думаю, що це слово, яке використовується для широкої публіки, але такі оновлення, як підтримка безпеки Windows і виправлення помилок, іноді називаються "KB" після перших двох букв ID.

Кожному з цих оновлень присвоюється ID і вказується у форматі "KBXXXXXXXX", де XXXXXX - це будь-яке число. Кількість цифр не фіксована). Однак зауважте, що не всі оновлення мають такий формат.

До речі, оригінальна назва цього «КБ» - «База знань Microsoft» і збігається з ID технічної статті, опублікованої Microsoft в Мережі. Наприклад, якщо це оновлення до KB980218, то відповідна технічна стаття є http://support.microsoft.com/?kbid=980218".

Програми, які шукають стан інсталяції КБ

Хоча зразки описані у Visual Studio 2010 і WPF, програми перевірки kb-check також можна використовувати в попередніх програмах Visual Studio, Windows Form і консольних програмах. У цій статті ми будемо використовувати інструменти керування Windows (WMI), щоб перевірити інсталяцію КБ.

Додавання посилань

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

Для використання WMI використовуються класи ManagementObjectSearcher і ManagementObject, але для використання цих класів необхідно звернутися до System.Management .dll.

Для проектів C# клацніть правою кнопкою миші «Посилання» з «Провідника рішень» і виберіть «Додати посилання».

参照の追加ダイアログで System.Management を選択して追加しています

Коли з'явиться діалогове вікно Додати посилання, натисніть на ". На вкладці NET виберіть System.Management і натисніть кнопку OK.

Ok, якщо до посилання у Провіднику рішень додано "Система.Керування".

VB.NET のプロジェクトのプロパティから System.Management の参照を追加しています

Якщо VB.NET відкрити властивості проекту, натисніть "Огляд" з вкладки зліва, натисніть кнопку Додати праворуч. Як і вище, відображається діалогове вікно «Додати посилання», тому виберіть «Система.Управління» і натисніть кнопку ОК.

Якщо повернутися до попереднього екрану і додати в середній список "Система.Управління", це нормально.

Крім того, відзначте "System.Management" зі списку нижче, щоб пропустити описи простору імен у вашій програмі.

Також, хоча він і не пов'язаний з оригінальними порадами, в цьому зразку використовується клас StringBuilder, тому я також поставив галочку на просторі імен "System.Text". (тільки VB.NET)

Сцени

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

Екран, який використовується в цьому зразку, являє собою простий екран з кнопкою виконання для перевірки стану установки КБ і текстовим полем, що відображає результати.

Я роблю це в WPF, але той самий екран налаштовується у формі Windows.

програма

C ManagementObjectSearcher # додає ""using System.Management; на початок коду, щоб зменшити опис класів та інших просторів імен. У VB.NET ви вказали, що у властивостях проекту слід імпортувати простір імен, тому нічого особливого писати не потрібно, але якщо ви цього не зробили, потрібно додати ".Imports System.Management

* Як в C#, так і в VB.NET, якщо всі імена класів написані з простору імен типу "System.Management.ManagementObjectSearcher", наведена вище специфікація не є обов'язковою.

C #

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 System.Management; // 追加 (参照から「.NET」より「System.Management」追加)

Нижче наведено код, який шукає та перераховує встановлений КБ.

C #

this.ResultTextBox.Text = "";

// WMI クエリをセットして管理オブジェクト検索クラスを作成
ManagementObjectSearcher query =
  new ManagementObjectSearcher("Select * From Win32_QuickFixEngineering");

// WMI クエリを使用して管理オブジェクトコレクションを取得
ManagementObjectCollection queryCollection = query.Get();

StringBuilder builder = new StringBuilder();

// コレクションから管理オブジェクトを列挙する
// ここでは HotFixID を取得
foreach (ManagementObject mo in queryCollection)
{
  builder.AppendLine(mo["HotFixID"].ToString());
}

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

VB.NET

Me.ResultTextBox.Text = ""

' WMI クエリをセットして管理オブジェクト検索クラスを作成
Dim query As ManagementObjectSearcher = _
  New ManagementObjectSearcher("Select * From Win32_QuickFixEngineering")

' WMI クエリを使用して管理オブジェクトコレクションを取得
Dim queryCollection As ManagementObjectCollection = query.Get()

Dim builder As System.Text.StringBuilder = New System.Text.StringBuilder()

' コレクションから管理オブジェクトを列挙する
' ここでは HotFixID を取得
For Each mo As ManagementObject In queryCollection
  builder.AppendLine(mo("HotFixID").ToString())
Next

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

""ResultTextBox в першому рядку являє собою текстове поле для відображення отриманих результатів.

створюєnew ManagementObjectSearcher екземпляр класу пошуку керованого об'єкта та встановлює запит WMI як аргумент. Синтаксис запиту практично дорівнює оператору SQL, тому подивіться на нього по відношенню до SQL для отримання деталей. "Win32_QuickFixEngineering" являє собою оновлення, яке застосовується до поточної операційної системи.

Виконує пошук за запитом WMI, вказаним раніше в "query.Get() і повертає результати як ".ManagementObjectCollection

Оскільки "" перераховує інформацію про оновлення, ми отримуємо "" в foreach і в результаті пишемо унікальний ідентифікатор з параметра "HotFixID"ManagementObjectCollectionManagementObject.

作成されたフォルダ

Коли ви це робите, ідентифікатори оновлень відображаються так, як показано на малюнку.

Як бачите, коли ви його запускаєте, він повільний тільки при першому запуску. Після другого разу досить рано.

Незрозуміло, чи повільно завантажується і обробляється System.Management.dll або виконується WMI-запитів повільно, але той факт, що він повільний, не змінюється, тому якщо вас турбує затримка при його використанні, думаю, що необхідно вжити таких заходів, як асинхронне виконання.