Използвайте WMI, за да определите състоянието на инсталиране на актуализации на Windows

Страницата се актуализира :
Дата на създаване на страница :

резюме

Използвайте WMI, за да проверите за актуализации (в КБ), които са инсталирани на Windows, който използвате в момента.

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

Операционна среда

Среда за проверка на операция

Версия на Windows
  • Крайната стойност на Windows 7
  • Бизнес на Windows Vista
.NET Рамкова версия
  • 3.5 SP1
  • 4

Изисквания към системата, необходими

Версия на Windows
  • Windows 98 или по-нова версия (но не всички потвърдени)
.NET Рамкова версия
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

вещество

Какво представлява KB?

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

KB се използва и като съкращение за израза "килобайт" или "клавиатура", така че не мисля, че това е дума, използвана за широката общественост, но актуализации като поддръжка на защитата на Windows и корекции на грешки понякога се обозначават като "КБ" след първите две букви на идентификационния номер.

На всяка от тези актуализации е присвоен ИД и е зададен във формат "KBXXXXXXX", където XXXXXX е произволен номер. Броят на цифрите не е фиксиран). Имайте предвид обаче, че не всички актуализации следват този формат.

Между другото, първоначалното име на това "КБ" е "база знания на Microsoft" и съответства на ИД на техническата статия, публикувана от Microsoft в уеб. Например, ако това е актуализация на KB980218, съответната техническа статия е http://support.microsoft.com/?kbid=980218".

Програми, които търсят състояние на инсталиране на КБ

Въпреки че пробите са описани в Visual Studio 2010 и WPF, kb-checking програми могат да се използват и в по-рано Visual Studio, Windows Form и конзола приложения. В тази статия ще използваме Инструмента за управление на Windows (WMI), за да проверим инсталирането на КБ.

Добавяне на препратки

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

За да използвате WMI, използвате класовете ManagementObjectSearcher и ManagementObject, но трябва да се обърнете към System.Management .dll, за да използвате тези класове.

За c# проекти щракнете с десния бутон препратки от Solution Explorer и изберете Добавяне на препратки.

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

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

OK, ако "System.Management" се добавя към препратката към Solution Explorer.

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

Ако VB.NET отворите свойствата на проекта, щракнете върху "Преглед" от раздела вляво, щракнете върху бутона Добавяне вдясно. Както по-горе, се показва диалоговият прозорец Добавяне на препратка, така че изберете "System.Management" и кликнете върху OK бутон.

Ако се върнете към предишния екран и добавите "System.Management" към средния списък, той е OK.

Също така проверете "System.Management" от списъка по-долу, за да пропускате описания на пространството на имената във вашата програма.

Също така, въпреки че не е свързана с оригиналните съвети, тази проба използва класа StringBuilder, така че проверих и пространството на имената "System.Text". (само за VB.NET)

място

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

Екранът, използван в тази проба, е прост екран с бутон за изпълнение, за да проверите състоянието на инсталацията на КБ и текстово поле, което показва резултатите.

Правя го в WPF, но същият екран е конфигурируем в Windows Form.

програма

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」追加)

По-долу е кодът, който търси и изброява инсталираната KB.

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

Тъй като "" изброява информацията за актуализацията, ние получаваме "" в преден и напишете уникален идентификатор от параметъра "HotFixID"ManagementObjectCollectionManagementObject в резултат на това.

作成されたフォルダ

Когато направите това, идентификаторите на актуализацията са изброени, както е показано на фигурата.

Както можете да видите, когато го стартирате, той е бавен само при първото бягане. След втория път е разумно рано.

Не е ясно дали System.Management.dll е бавно да се зареди и обработи или WMI заявка изпълнение е бавно, но фактът, че е бавен не се променя, така че ако се притеснявате за латентност, когато го използвате, мисля, че е необходимо да се вземат мерки като асинхронно изпълнение.