Utilizați WMI pentru a determina starea de instalare a actualizărilor Windows
rezumat
Utilizați WMI pentru a căuta actualizări (în KB) care sunt instalate pe Windows pe care îl utilizați în prezent.
Mediul de operare
Mediul de verificare a operațiunilor
Versiunea Windows |
|
Versiunea .NET Framework |
|
Cerințe de sistem necesare
Versiunea Windows |
|
Versiunea .NET Framework |
|
substanță
Ce este 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.
- Instrumentație de management Windows (de la Wikipedia)
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.
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.
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ă
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"ManagementObjectCollection
ManagementObject
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ă.