Utilitzeu WMI per determinar l'estat d'instal·lació de les actualitzacions de Windows

Pàgina actualitzada :
Data de creació de la pàgina :

resum

Utilitzeu WMI per comprovar si hi ha actualitzacions (en KB) instal·lades al Windows que utilitzeu actualment.

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

Entorn operatiu

Entorn de comprovació de l'operació

Versió de Windows
  • Windows 7 Definitiu
  • Negocis de Perspectiva de Windows
Versió .NET Framework
  • 3.5 SP1
  • 4

Requisits del sistema requerits

Versió de Windows
  • Windows 98 o posterior (però no tots confirmats)
Versió .NET Framework
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

substància

Què és KB?

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

KB també s'utilitza com a abreviatura de l'expressió "kilobyte" o "teclat", de manera que no crec que sigui una paraula utilitzada per al públic en general, però actualitzacions com ara suport de seguretat de Windows i correccions d'errors de vegades es denominen "KB" després de les dues primeres lletres de l'identificador.

A cadascuna d'aquestes actualitzacions se li assigna un ID i s'especifica en el format "KBXXXXXX" on XXXXXX és qualsevol número. El nombre de dígits no és fix). Tingueu en compte, però, que no totes les actualitzacions segueixen aquest format.

Per cert, el nom original d'aquesta "KB" és "Microsoft Knowledge Base" i coincideix amb l'identificador de l'article tècnic publicat per Microsoft al web. Per exemple, si es tracta d'una actualització de KB980218, l'article tècnic corresponent és http://support.microsoft.com/?kbid=980218".

Programes que cerquen l'estat de la instal·lació de KB

Tot i que les mostres es descriuen al Visual Studio 2010 i al WPF, els programes de comprovació de KB també es poden utilitzar en aplicacions anteriors del Visual Studio, el Windows Form i la consola. En aquest article, utilitzarem Instrumentació d'administració de Windows (WMI) per comprovar la instal·lació de KB.

Addició de referències

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

Per utilitzar WMI, utilitzeu les classes ManagementObjectSearcher i ManagementObject, però heu de consultar System.Management .dll per utilitzar aquestes classes.

Per als projectes C#, feu clic amb el botó dret a Referències de l'Explorador de solucions i trieu Afegeix referències.

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

Quan aparegui el diàleg Afegeix referència, feu clic a ". Des de la pestanya NET, seleccioneu System.Management i feu clic al botó D'acord.

D'acord si s'afegeix "System.Management" a la referència de l'Explorador de solucions.

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

Si VB.NET obrir les propietats del projecte, feu clic a "Examinar" des de la pestanya de l'esquerra, feu clic al botó Afegeix a la dreta. Com a dalt, es mostra el diàleg Afegeix referència, així que seleccioneu "Gestió del sistema" i feu clic al botó D'acord.

Si torneu a la pantalla anterior i afegiu "System.Management" a la llista mitjana, està bé.

A més, marqueu "System.Management" a la llista següent per ometre les descripcions de l'espai de noms al vostre programa.

A més, tot i que no està relacionat amb els consells originals, aquesta mostra utilitza la classe StringBuilder, de manera que també vaig comprovar l'espai de noms "System.Text". (VB.NET)

escena

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

La pantalla utilitzada en aquesta mostra és una pantalla senzilla amb un botó d'execució per comprovar l'estat d'instal·lació de la KB i un quadre de text que mostra els resultats.

Ho faig en WPF, però la mateixa pantalla és configurable en Windows Form.

programa

C ManagementObjectSearcher # afegeix ""using System.Management; al començament del codi per reduir la descripció de classes i altres espais de noms. En VB.NET, heu especificat que l'espai de noms s'ha d'importar a les propietats del projecte, de manera que no cal que escriviu res especial, però si no ho heu fet, heu d'afegir ".Imports System.Management

* Tant en C# com en VB.NET, si tots els noms de classe s'escriuen des d'un espai de noms com "System.Management.ManagementObjectSearcher", no és necessària l'especificació anterior.

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

A continuació es mostra el codi que cerca i llista la KB instal·lada.

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()

El ""ResultTextBox de la primera línia és un quadre de text per mostrar els resultats obtinguts.

creanew ManagementObjectSearcher una instància de la classe de cerca de l'objecte gestionat i estableix la consulta WMI com a argument. La sintaxi d'una consulta és gairebé igual a una expressió SQL, així que mireu-la en relació amb SQL per obtenir més detalls. "Win32_QuickFixEngineering" representa una actualització que s'aplica al sistema operatiu actual.

Realitza una cerca sobre la consulta WMI especificada anteriorment en "query.Get() i retorna els resultats com ".ManagementObjectCollection

Com que "" llista la informació d'actualització, obtenim "" en foreach i escrivim un identificador únic del paràmetre "HotFixID"ManagementObjectCollectionManagementObject com a resultat.

作成されたフォルダ

Quan ho feu, els identificadors d'actualització es mostren tal com es mostra a la figura.

Com podeu veure quan l'executeu, només és lent a la primera tirada. Després de la segona vegada, és raonablement aviat.

No està clar si System.Management.dll és lenta en la càrrega i el procés o l'execució de la consulta WMI és lenta, però el fet que sigui lenta no canvia, de manera que si us preocupa la latència a l'hora d'utilitzar-lo, crec que cal prendre mesures com l'execució asíncrona.