WMI kasutamine Windowsi värskenduste installioleku määramiseks

Lehekülg uuendatud :
Lehe loomise kuupäev :

Kokkuvõte

WMI abil saate otsida värskendusi (KB-des), mis on installitud praegu kasutatavasse Windowsi.

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

Töökeskkond

Toimingu kontrollimise keskkond

Windowsi versioon
  • Windows 7 Ultimate
  • Windows Vista Äri
.NET Frameworki versioon
  • 3.5 SP1
  • 4

Nõutavad süsteeminõuded

Windowsi versioon
  • Windows 98 või uuem (kuid mitte kõik kinnitatud)
.NET Frameworki versioon
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

aine

Mis on KB?

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

KB-d kasutatakse ka lühendina väljendist "kilobait" või "klaviatuur", nii et ma ei usu, et see on avalikkusele kasutatav sõna, kuid värskendusi, nagu Windowsi turvatugi ja veaparandused, nimetatakse mõnikord ID kahe esimese tähe järel "KB".

Kõigile neile värskendustele määratakse ID ja täpsustatakse vormingus "KBXXXXXXX", kus XXXXXX on suvaline number. Numbrite arv ei ole fikseeritud). Pange tähele, et mitte kõik värskendused ei järgi seda vormingut.

Muide, selle KB algne nimi on "Microsofti teabebaas" ja vastab Microsofti veebis avaldatud tehnilise artikli ID-le. Näiteks kui see on KB980218 värskendus, on vastav tehniline artikkel http://support.microsoft.com/?kbid=980218".

Programmid, mis otsivad KB installimise olekut

Kuigi näidiseid on kirjeldatud Visual Studio 2010 ja WPF-is, saab KB-kontrollprogramme kasutada ka varasemates Visual Studio, Windows Formi ja konsoolirakendustes. Selles artiklis kasutame KB installimise kontrollimiseks Windowsi haldusinstrumente (WMI).

Viidete lisamine

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

WMI kasutamiseks kasutate klasse ManagementObjectSearcher ja ManagementObject, kuid nende klasside kasutamiseks peate viitama system.management .dll.

C# projektide puhul paremklõpsake Solution Exploreris valikut Viited ja valige Lisa viited.

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

Kui kuvatakse dialoog Lisa viide, klõpsake nuppu ". Valige vahekaardil NET System.Management ja klõpsake nuppu OK.

OK, kui lahenduseuurija viitele lisatakse "System.Management".

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

Kui VB.NET projekti atribuute avada, klõpsake vasakul vahekaardil "Sirvi", klõpsake paremal asuvat nuppu Lisa. Nagu eespool öeldud, kuvatakse dialoog Lisa viide, seega valige "System.Management" ja klõpsake nuppu OK.

Kui naasete eelmisele ekraanile ja lisate keskmisesse loendisse "System.Management", on see OK.

Samuti kontrollige allolevast loendist "System.Management", et jätta oma programmis välja nimeruumi kirjeldused.

Samuti, kuigi see ei ole seotud algsete näpunäidetega, kasutab see proov StringBuilderi klassi, seega kontrollisin ka nimeruumi "System.Text". (ainult VB.NET)

Stseen

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

Selles näidises kasutatav ekraan on lihtne ekraan, millel on käivitamisnupp KB installioleku kontrollimiseks ja tekstikast, mis kuvab tulemused.

Ma teen seda WPF-is, kuid sama ekraan on konfigureeritav Windows Formis.

programm

C ManagementObjectSearcher # lisab koodi algusesse ""using System.Management;, et vähendada klasside ja muude nimeruumide kirjeldust. VB.NET määrasite, et nimeruum tuleks importida projekti atribuutidesse, nii et te ei pea midagi erilist kirjutama, kuid kui te pole seda teinud, peate lisama ".Imports System.Management

* Nii C# kui ka VB.NET puhul, kui kõik klassinimed on kirjutatud nimeruumist, näiteks "System.Management.ManagementObjectSearcher", ei ole ülaltoodud spetsifikatsioon vajalik.

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

Allpool on kood, mis otsib ja loetleb installitud 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()

Esimeses reas olev ""ResultTextBox on tekstikast saadud tulemuste kuvamiseks.

loobnew ManagementObjectSearcher hallatava objekti otsinguklassi eksemplari ja määrab argumendiks WMI-päringu. Päringu süntaks on peaaegu võrdne SQL-lausega, seega vaadake seda SQL-i suhtes üksikasjade saamiseks. "Win32_QuickFixEngineering" tähistab värskendust, mis kehtib praeguse operatsioonisüsteemi kohta.

Teeb otsingu WMI päringuga, mis on täpsustatud jaotises " varem,query.Get() ja tagastab tulemused kujul ".ManagementObjectCollection

Kuna "" loetleb värskendusteabe, saame igale poole "" ja kirjutame selle tulemusena parameetrist "HotFixID"ManagementObjectCollectionManagementObject unikaalse identifikaatori.

作成されたフォルダ

Kui te seda teete, kuvatakse värskenduse ID-d, nagu on näidatud joonisel.

Nagu näete selle käivitamisel, on see aeglane ainult esimesel käivitamisel. Pärast teist korda on see mõistlikult vara.

Ei ole selge, kas System.Management.dll laadimine ja töötlemine on aeglane või WMI päringu täitmine on aeglane, kuid asjaolu, et see on aeglane, ei muutu, nii et kui olete selle kasutamisel latentsuse pärast mures, arvan, et on vaja võtta selliseid meetmeid nagu asünkroonne täitmine.