Naudokite WMI, kad nustatytumėte "Windows" naujinimų diegimo būseną
suvestinė
Naudokite WMI, kad patikrintumėte, ar nėra naujinimų (KB), įdiegtų šiuo metu naudojamoje "Windows".
Darbinė aplinka
Veikimo tikrinimo aplinka
"Windows" versija |
|
".NET Framework" versija |
|
Reikalingi sistemos reikalavimai
"Windows" versija |
|
".NET Framework" versija |
|
medžiaga
Kas yra KB?
KB taip pat naudojamas kaip frazės "kilobaitas" arba "klaviatūra" santrumpa, todėl nemanau, kad tai žodis, naudojamas plačiajai visuomenei, tačiau tokie naujinimai kaip "Windows" saugos palaikymas ir klaidų taisymai kartais vadinami "KB" po pirmųjų dviejų ID raidžių.
Kiekvienam iš šių naujinimų priskiriamas ID ir jis nurodomas formatu "KBXXXXXXX", kur XXXXXX yra bet koks numeris. Skaitmenų skaičius nėra fiksuotas). Tačiau atminkite, kad ne visi naujinimai atitinka šį formatą.
Beje, originalus šio "KB" pavadinimas yra "Microsoft žinių bazė" ir atitinka "Microsoft" internete paskelbto techninio straipsnio ID. Pavyzdžiui, jei tai yra naujinimas į KB980218, atitinkamas techninis straipsnis yra http://support.microsoft.com/?kbid=980218".
Programos, kurios ieško KB diegimo būsenos
Nors pavyzdžiai aprašyti "Visual Studio 2010" ir WPF, KB tikrinimo programas taip pat galima naudoti ankstesnėse "Visual Studio", "Windows Form" ir konsolės programose. Šiame straipsnyje naudosime "Windows" valdymo prietaisus (WMI), kad patikrintume KB diegimą.
- "Windows" valdymo prietaisai (iš Vikipedijos)
Nuorodų pridėjimas
Norėdami naudoti WMI, naudojate "ManagementObjectSearcher" ir "ManagementObject" klases, tačiau norėdami naudoti šias klases, turite kreiptis į System.Management .dll.
C# projektams dešiniuoju pelės mygtuku spustelėkite Nuorodos iš "Solution Explorer" ir pasirinkite Pridėti nuorodų.
Kai pasirodys dialogo langas Pridėti nuorodą, spustelėkite ". Skirtuke NET pasirinkite System.Management ir spustelėkite ok mygtuką.
Gerai, jei "System.Management" įtraukiama į "Solution Explorer" nuorodą.
Jei VB.NET atidaryti projekto ypatybes, kairėje esančiame skirtuke spustelėkite "Naršyti", spustelėkite dešinėje esantį mygtuką Pridėti. Kaip nurodyta aukščiau, rodomas dialogo langas Pridėti nuorodą, todėl pasirinkite "System.Management" ir spustelėkite mygtuką Gerai.
Jei grįšite į ankstesnį ekraną ir pridėsite "System.Management" prie vidurinio sąrašo, viskas gerai.
Be to, toliau pateiktame sąraše pažymėkite "System.Management", kad praleistumėte vardų srities aprašymus savo programoje.
Be to, nors jis nėra susijęs su originaliais patarimais, šiame pavyzdyje naudojama stringBuilder klasė, todėl taip pat patikrinau vardų sritį "System.Text". (tik VB.NET)
Scena
Šiame pavyzdyje naudojamas ekranas yra paprastas ekranas su vykdymo mygtuku, kad būtų galima patikrinti KB diegimo būseną, ir teksto laukeliu, kuriame rodomi rezultatai.
Aš tai darau WPF, bet tą patį ekraną galima konfigūruoti "Windows Form".
programa
C ManagementObjectSearcher
# prideda ""using System.Management;
prie kodo pradžios, kad sumažintų klasių ir kitų vardų sričių aprašymą. VB.NET nurodėte, kad vardų sritis turėtų būti importuota į projekto ypatybes, todėl jums nereikia rašyti nieko ypatingo, bet jei to nepadarėte, turite pridėti ".Imports System.Management
* Tiek C#, tiek VB.NET, jei visi klasių pavadinimai yra parašyti iš vardų srities, pvz., "System.Management.ManagementObjectSearcher
", aukščiau pateikta specifikacija nėra būtina.
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」追加)
Žemiau yra kodas, kuris ieško ir pateikia įdiegtą KB sąrašą.
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()
Pirmoje eilutėje esantis ""ResultTextBox
yra teksto laukelis gautiems rezultatams rodyti.
sukurianew ManagementObjectSearcher
valdomo objekto ieškos klasės egzempliorių ir nustato WMI užklausą kaip argumentą. Užklausos sintaksė yra beveik lygi SQL teiginiui, todėl išsamesnės informacijos ieškokite sql atžvilgiu. "Win32_QuickFixEngineering" reiškia naujinimą, taikomą dabartinei operacinei sistemai.
Atlieka paiešką WMI užklausoje, nurodytoje anksčiau "query.Get()
ir grąžina rezultatus kaip ".ManagementObjectCollection
Kadangi "" pateikia naujinimo informaciją, mes gauname "" iš anksto ir dėl to rašome unikalų identifikatorių iš parametro "HotFixID"ManagementObjectCollection
ManagementObject
.
Kai tai padarysite, naujinimo ID bus išvardyti taip, kaip parodyta paveikslėlyje.
Kaip matote, kai jį paleidžiate, jis yra lėtas tik pirmojo bėgimo metu. Po antro karto jau gana anksti.
Neaišku, ar System.Management.dll lėtai įkeliama ir apdorojama, ar WMI užklausos vykdymas yra lėtas, tačiau tai, kad jis yra lėtas, nesikeičia, todėl, jei nerimaujate dėl delsos jį naudojant, manau, kad būtina imtis tokių priemonių kaip asinchroninis vykdymas.