Uporaba WMI za določanje stanja namestitve posodobitev sistema Windows
Povzetek
Uporabite WMI, če želite preveriti, ali obstajajo posodobitve (v KB), ki so nameščene v sistemu Windows, ki ga trenutno uporabljate.
Operativno okolje
Okolje za preverjanje delovanja
Različica sistema Windows |
|
.NET Framework Različica |
|
Zahtevane sistemske zahteve
Različica sistema Windows |
|
.NET Framework Različica |
|
snov
Kaj je KB?
KB se uporablja tudi kot okrajšava za izraz "kilobajt" ali "tipkovnica", zato mislim, da to ni beseda, ki se uporablja za splošno javnost, vendar posodobitve, kot so varnostna podpora sistema Windows in popravki napak, se po prvih dveh črkah ID-ja včasih imenujejo "KB".
Vsaki od teh posodobitev je dodeljen ID in določen v obliki "KBXXXXXXX", kjer je XXXXXX katero koli število. Število števk ni fiksno). Vendar upoštevajte, da vse posodobitve ne sledijo tej obliki zapisa.
Mimogrede, izvirno ime tega »KB« je »Microsoftova baza znanja« in se ujema z ID-jem tehničnega članka, ki ga microsoft objavi na spletu. Na primer, če gre za posodobitev kb980218, je ustrezen tehnični članek http://support.microsoft.com/?kbid=980218".
Programi, ki iščejo stanje namestitve KB
Čeprav so vzorci opisani v programu Visual Studio 2010 in WPF, lahko programe za preverjanje kb uporabljate tudi v starejših programih Visual Studio, Windows Form in konzole. V tem članku bomo za preverjanje namestitve KB uporabili Windows Management Instrumentation (WMI).
- Windows Management Instrumentation (iz Wikipedija)
Dodajanje sklicev
Če želite uporabljati WMI, uporabite razrede ManagementObjectSearcher in ManagementObject, vendar morate za uporabo teh razredov .dll system.Management.
Za projekte C# z desno tipko miške kliknite Reference iz Raziskovalca rešitev in izberite Dodaj reference.
Ko se prikaže pogovorno okno Dodajanje sklica, kliknite na ". Na zavihku NET izberite System.Management in kliknite ok gumb.
V redu, če se sklicu raziskovalca rešitev doda »System.Management«.
Če VB.NET odprite lastnosti projekta, na zavihku na levi kliknite »Prebrskaj« in na desni kliknite gumb Dodaj. Kot zgoraj, je prikazano pogovorno okno Add Reference, zato izberite "System.Management" in kliknite ok gumb.
Če se vrnete na prejšnji zaslon in dodate »System.Management« na srednji seznam, je v redu.
Prav tako preverite "System.Management" s spodnjega seznama, da izoščite opise imenskega prostora v vašem programu.
Prav tako, čeprav ni povezan z izvirnimi nasveti, ta vzorec uporablja StringBuilder razred, tako da sem preveril tudi imenski prostor "System.Text". (VB.NET samo)
Scene
Zaslon, ki se uporablja v tem vzorcu, je preprost zaslon z gumbom za izvršitev, da preverite stanje namestitve KB in polje z besedilom, ki prikazuje rezultate.
Delam ga v WPF, vendar je isti zaslon nastavljiv v Windows Form.
program
C ManagementObjectSearcher
# dodaja ""using System.Management;
na začetek kode za zmanjšanje opisa razredov in drugih imenskih prostorov. V VB.NET ste določili, da je treba imenski prostor uvoziti v lastnosti projekta, zato vam ni treba pisati ničesar posebnega, če pa tega niste storili, morate dodati ".Imports System.Management
* V C# in VB.NET, če so vsa imena razredov zapisana iz imenskega prostora, kot je "System.Management.ManagementObjectSearcher
", zgoraj navedena specifikacija ni potrebna.
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」追加)
Spodaj je koda, ki išče in prikazuje nameščeni 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
v prvi vrstici je polje z besedilom za prikaz pridobljenih rezultatov.
ustvari primereknew ManagementObjectSearcher
razreda iskanja upravljanega predmeta in poizvedbo WMI nalaga kot argument. Sintaksa poizvedbe je skoraj enaka SQL izjavi, zato si jo oglejte v zvezi s SQL za podrobnosti. »Win32_QuickFixEngineering« predstavlja posodobitev, ki velja za trenutni operacijski sistem.
Izvede iskanje v poizvedbi WMI, določeni prej v "query.Get()
in vrne rezultate kot ".ManagementObjectCollection
Ker »« navede informacije o posodobitvi, smo dobili "" v prednje in napisati enolični identifikator iz parametra "HotFixID"ManagementObjectCollection
ManagementObject
kot rezultat.
Ko to storite, so ID-ji posodobitev navedeni, kot je prikazano na sliki.
Kot lahko vidite, ko ga zaženete, je počasna le pri prvem teku. Po drugič je razumno zgodaj.
Ni jasno, ali System.Management.dll je počasno nalaganje in obdelavo ali WMI poizvedbe je počasna, vendar dejstvo, da je počasno ne spremeni, tako da, če ste zaskrbljeni zaradi zamude pri uporabi, mislim, da je treba sprejeti ukrepe, kot so asinchronous izvršitev.