Använd WMI för att fastställa installationsstatus för Windows-uppdateringar

Sidan uppdaterad :
Datum för skapande av sida :

sammanfattning

Använd WMI för att söka efter uppdateringar (i KB) som är installerade på det Windows som du använder för närvarande.

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

Verksamhetsmiljö

Miljö för driftskontroll

Windows-version
  • Windows 7 Ultimate
  • Windows Vista För företag
.NET Framework-version
  • 3.5 SP1
  • 4

Systemkrav krävs

Windows-version
  • Windows 98 eller senare (men inte alla bekräftade)
.NET Framework-version
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

substans

Vad är KB?

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

KB används också som en förkortning för uttrycket "kilobyte" eller "tangentbord", så jag tror inte att det är ett ord som används för allmänheten, men uppdateringar som Windows säkerhetsstöd och buggfixar kallas ibland "KB" efter de två första bokstäverna i ID.

Var och en av dessa uppdateringar tilldelas ett ID och anges i formatet "KBXXXXXXX" där XXXXXX är valfritt nummer. Antalet siffror är inte fast). Observera dock att inte alla uppdateringar följer detta format.

Förresten är det ursprungliga namnet på denna "KB" "Microsoft Knowledge Base" och matchar ID för den tekniska artikeln som publicerats av Microsoft på webben. http://support.microsoft.com/?kbid=980218".

Program som söker efter KB-installationsstatus

Även om exemplen beskrivs i Visual Studio 2010 och WPF kan KB-kontrollprogram också användas i tidigare Visual Studio-, Windows Form- och konsolappar. I den här artikeln använder vi Windows Management Instrumentation (WMI) för att kontrollera KB-installationen.

Lägga till referenser

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

Om du vill använda WMI använder du klasserna ManagementObjectSearcher och ManagementObject, men du måste läsa System.Management .dll för att använda dessa klasser.

För C#-projekt högerklickar du på Referenser från Solution Explorer och väljer Lägg till referenser.

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

När dialogrutan Lägg till referens visas klickar du på ". På fliken NET väljer du System.Management och klickar på OK knapp.

OK om "System.Management" läggs till i Solution Explorer referensen.

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

Om VB.NET öppnar projektegenskaperna klickar du på "Bläddra" på fliken till vänster, klickar på knappen Lägg till till höger. Som ovan visas dialogrutan Lägg till referens, så välj "System.Management" och klicka på OK-knappen.

Om du återgår till föregående skärm och lägger till "System.Management" i mittlistan är det OK.

Kontrollera också "System.Management" från listan nedan för att utelämna namnrymdsbeskrivningar i ditt program.

Även om det inte är relaterat till de ursprungliga tipsen, använder det här exemplet klassen StringBuilder, så jag kontrollerade också namnområdet "System.Text". (endast VB.NET)

scen

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

Skärmen som används i det här exemplet är en enkel skärm med en körningsknapp för att kontrollera installationsstatusen för KB och en textruta som visar resultaten.

Jag gör det i WPF, men samma skärm kan konfigureras i Windows Form.

program

C ManagementObjectSearcher # lägger till ""using System.Management; i början av koden för att minska beskrivningen av klasser och andra namnrymder. I VB.NET angav du att namnområdet skulle importeras i projektegenskaperna, så du behöver inte skriva något speciellt, men om du inte har gjort det måste du lägga till ".Imports System.Management

* I både C#- och VB.NET, om alla klassnamn skrivs från ett namnområde som "System.Management.ManagementObjectSearcher", är ovanstående specifikation inte nödvändig.

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

Nedan är koden som söker och listar den installerade 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 i första raden är en textruta för att visa de erhållna resultaten.

skaparnew ManagementObjectSearcher en instans av det hanterade objektets sökklass och anger WMI-frågan som ett argument. Syntaxen för en fråga är nästan lika med en SQL-sats, så titta på den i förhållande till SQL för detaljer. "Win32_QuickFixEngineering" representerar en uppdatering som gäller för det aktuella operativsystemet.

Utför en sökning på WMI-frågan som angavs tidigare i "query.Get() och returnerar resultatet som ".ManagementObjectCollection

Eftersom "" listar uppdateringsinformationen får vi "" i förvar och skriver en unik identifierare från parametern "HotFixID"ManagementObjectCollectionManagementObject som ett resultat.

作成されたフォルダ

När du gör detta visas uppdaterings-ID:n enligt bilden.

Som du kan se när du kör den är den långsam endast vid första körningen. Efter andra gången är det hyfsat tidigt.

Det är inte klart om System.Management.dll är långsam att ladda och bearbeta eller WMI-frågekörning är långsam, men det faktum att det är långsamt ändras inte, så om du är orolig för latens när du använder den tror jag att det är nödvändigt att vidta åtgärder som asynkron körning.