Naudokite WMI, kad nustatytumėte "Windows" naujinimų diegimo būseną

Puslapis atnaujintas :
Puslapio sukūrimo data :

suvestinė

Naudokite WMI, kad patikrintumėte, ar nėra naujinimų (KB), įdiegtų šiuo metu naudojamoje "Windows".

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

Darbinė aplinka

Veikimo tikrinimo aplinka

"Windows" versija
  • "Windows 7 Ultimate"
  • "Windows Vista Business"
".NET Framework" versija
  • 3,5 SP1
  • 4

Reikalingi sistemos reikalavimai

"Windows" versija
  • "Windows 98" arba naujesnė versija (bet ne visos patvirtintos)
".NET Framework" versija
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

medžiaga

Kas yra KB?

インストールされている更新プログラム(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ą.

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ų.

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

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ą.

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

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

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

Š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"ManagementObjectCollectionManagementObject.

作成されたフォルダ

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.