Utilizați WMI pentru a determina starea de instalare a actualizărilor Windows

Pagina actualizată :
Data creării paginii :

rezumat

Utilizați WMI pentru a căuta actualizări (în KB) care sunt instalate pe Windows pe care îl utilizați în prezent.

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

Mediul de operare

Mediul de verificare a operațiunilor

Versiunea Windows
  • Windows 7 Ultimate
  • Windows Vista de afaceri
Versiunea .NET Framework
  • 3.5 SP1
  • 4

Cerințe de sistem necesare

Versiunea Windows
  • Windows 98 sau o versiune ulterioară (dar nu toate confirmate)
Versiunea .NET Framework
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

substanță

Ce este KB?

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

KB este, de asemenea, utilizat ca o abreviere pentru expresia "kilobyte" sau "tastatură", deci nu cred că este un cuvânt folosit pentru publicul larg, dar actualizări, cum ar fi suportul de securitate Windows și remedierile de erori sunt uneori denumite "KB" după primele două litere ale ID-ului.

Fiecăreia dintre aceste actualizări i se atribuie un ID și este specificat în formatul "KBXXXXXXX" unde XXXXXX este orice număr. Numărul de cifre nu este fix). Rețineți, totuși, că nu toate actualizările urmează acest format.

Apropo, numele original al acestui "KB" este "Baza de cunoștințe Microsoft" și se potrivește cu ID-ul articolului tehnic publicat de Microsoft pe Web. De exemplu, dacă este o actualizare la KB980218, articolul tehnic corespunzător este http://support.microsoft.com/?kbid=980218".

Programe care caută starea de instalare KB

Deși eșantioanele sunt descrise în Visual Studio 2010 și WPF, KB-verificarea programelor pot fi, de asemenea, utilizate în visual Studio anterioare, Formular Windows și aplicații de consolă. În acest articol, vom folosi Instrumentația de management Windows (WMI) pentru a verifica instalarea KB.

Adăugarea referințelor

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

Pentru a utiliza WMI, utilizați clasele ManagementObjectSearcher și ManagementObject, dar trebuie să consultați System.Management .dll pentru a utiliza aceste clase.

Pentru proiectele C#, faceți clic dreapta pe Referințe din Exploratorul de soluții și alegeți Adăugare referințe.

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

Când apare caseta de dialog Adăugare referință, faceți clic pe ". Din fila NET, selectați System.Management și faceți clic pe OK butonul.

OK dacă se adaugă "System.Management" la referința Explorator de soluții.

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

Dacă VB.NET deschideți proprietățile proiectului, faceți clic pe "Răsfoire" din fila din stânga, faceți clic pe butonul Adăugare din dreapta. Ca mai sus, se afișează caseta de dialog Adăugare referință, deci selectați "System.Management" și faceți clic pe OK buton.

Dacă reveniți la ecranul anterior și adăugați "System.Management" la lista de mijloc, este OK.

De asemenea, verificați "System.Management" din lista de mai jos pentru a omite descrierile spațiului de nume în programul dvs.

De asemenea, deși nu este legată de sfaturile originale, acest eșantion utilizează clasa StringBuilder, așa că am verificat și spațiul de nume "System.Text". (numai VB.NET)

scenă

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

Ecranul utilizat în acest eșantion este un ecran simplu cu un buton de execuție pentru a verifica starea de instalare a KB și o casetă text care afișează rezultatele.

I'm making it in WPF, but the same screen is configurable in Windows Form.

program

C ManagementObjectSearcher # adaugă ""using System.Management; la începutul codului pentru a reduce descrierea claselor și a altor spații de nume. În VB.NET, ați specificat că spațiul de nume ar trebui să fie importat în proprietățile proiectului, deci nu trebuie să scrieți nimic special, dar dacă nu ați făcut acest lucru, trebuie să adăugați ".Imports System.Management

* Atât în C# cât și în VB.NET, dacă toate numele claselor sunt scrise dintr-un spațiu de nume, cum ar fi "System.Management.ManagementObjectSearcher", specificația de mai sus nu este necesară.

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

Mai jos este codul care caută și listează KB instalat.

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 în prima linie este o casetă text pentru afișarea rezultatelor obținute.

creeazănew ManagementObjectSearcher o instanță a clasei de căutare a obiectului gestionat și setează interogarea WMI ca argument. Sintaxa unei interogări este aproape egală cu o instrucțiune SQL, deci uitați-vă la ea în legătură cu SQL pentru detalii. "Win32_QuickFixEngineering" reprezintă o actualizare care se aplică sistemului de operare curent.

Efectuează o căutare pe interogarea WMI specificată mai devreme în "query.Get() și returnează rezultatele ca ".ManagementObjectCollection

Deoarece "" listează informațiile de actualizare, obținem "" în foreach și scriem un identificator unic din parametrul "HotFixID"ManagementObjectCollectionManagementObject ca rezultat.

作成されたフォルダ

Când faceți acest lucru, ID-urile de actualizare sunt listate așa cum se arată în figură.

După cum puteți vedea când îl rulați, este lent numai la prima rulare. După a doua oară, este destul de devreme.

Nu este clar dacă System.Management.dll este lent pentru a încărca și procesa sau wmi interogare executarea este lentă, dar faptul că este lent nu se schimbă, deci dacă sunteți îngrijorat de latență atunci când îl utilizați, cred că este necesar să se ia măsuri, cum ar fi executarea asincronă.