Použitie WMI na určenie stavu inštalácie aktualizácií systému Windows

Stránka aktualizovaná :
Dátum vytvorenia strany :

súhrn

Pomocou WMI vyhľadajte aktualizácie (v KB), ktoré sú nainštalované v systéme Windows, ktorý momentálne používate.

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

Prevádzkové prostredie

Prostredie kontroly prevádzky

Verzia systému Windows
  • Windows 7 Ultimate
  • Windows Vista Business
Verzia rozhrania .NET Framework
  • 3.5 SP1
  • 4

Vyžadujú sa systémové požiadavky

Verzia systému Windows
  • Windows 98 alebo novší (ale nie všetky potvrdené)
Verzia rozhrania .NET Framework
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

látka

Čo je KB?

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

KB sa tiež používa ako skratka pre výraz "kilobajt" alebo "klávesnica", takže si nemyslím, že je to slovo používané pre širokú verejnosť, ale aktualizácie, ako je podpora zabezpečenia systému Windows a opravy chýb, sa niekedy označujú ako "KB" za prvými dvoma písmenami ID.

Každej z týchto aktualizácií je priradené ID a zadané vo formáte "KBXXXXXXX", kde XXXXXX je ľubovoľné číslo. Počet číslic nie je pevne stanovený). Upozorňujeme však, že nie všetky aktualizácie sa riadia týmto formátom.

Mimochodom, pôvodný názov tohto "KB" je "Microsoft Knowledge Base" a zhoduje sa s ID technického článku publikovaného spoločnosťou Microsoft na webe. http://support.microsoft.com/?kbid=980218".

Programy, ktoré vyhľadávajú stav inštalácie kB

Aj keď sú ukážky popísané v Visual Studio 2010 a WPF, programy na kontrolu KB je možné použiť aj v starších aplikáciách Visual Studio, Windows Form a konzoly. V tomto článku použijeme nástroj Windows Management Instrumentation (WMI) na kontrolu inštalácie KB.

Pridávanie referencií

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

Ak chcete používať WMI, používate triedy ManagementObjectSearcher a ManagementObject, ale ak chcete používať tieto triedy, musíte si prečítať .dll System.Management.

V prípade projektov C# kliknite pravým tlačidlom myši na položku Referencie v Prieskumníkovi riešení a vyberte položku Pridať referencie.

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

Keď sa zobrazí dialógové okno Pridať referenciu, kliknite na ". Na karte NET vyberte položku System.Management a kliknite na tlačidlo OK.

OK, ak sa do odkazu na Prieskumníka riešení pridá "System.Management".

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

Ak VB.NET otvorte vlastnosti projektu, kliknite na "Prehľadávať" na karte vľavo, kliknite na tlačidlo Pridať vpravo. Ako je uvedené vyššie, zobrazí sa dialógové okno Pridať referenciu, takže vyberte možnosť "System.Management" a kliknite na tlačidlo OK.

Ak sa vrátite na predchádzajúcu obrazovku a do stredného zoznamu pridáte "System.Management", je to v poriadku.

Skontrolujte tiež "System.Management" zo zoznamu nižšie, aby ste vo svojom programe vynechali popisy priestoru názvov.

Aj keď to nesúvisí s pôvodnými tipmi, táto vzorka používa triedu StringBuilder, takže som skontroloval aj priestor názvov "System.Text". (len VB.NET)

scéna

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

Obrazovka použitá v tejto ukážke je jednoduchá obrazovka s tlačidlom spustenia na kontrolu stavu inštalácie KB a textovým poľom, ktoré zobrazuje výsledky.

Robím to vo WPF, ale rovnaká obrazovka je konfigurovateľná vo Formulári Windows.

program

C ManagementObjectSearcher # pridá ""using System.Management; na začiatok kódu, aby sa zmenšil popis tried a iných menných priestorov. V VB.NET ste zadali, že priestor názvov by sa mal importovať do vlastností projektu, takže nemusíte písať nič zvláštne, ale ak ste tak neurobili, musíte pridať ".Imports System.Management

* V C# aj VB.NET, ak sú všetky názvy tried napísané z menného priestoru, ako napríklad "System.Management.ManagementObjectSearcher", vyššie uvedená špecifikácia nie je potrebná.

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

Nižšie je uvedený kód, ktorý vyhľadáva a uvádza nainštalovanú aktualizáciu 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 prvom riadku je textové pole na zobrazenie získaných výsledkov.

vytvorínew ManagementObjectSearcher inštanciu triedy vyhľadávania spravovaného objektu a nastaví dotaz WMI ako argument. Syntax dotazu je takmer rovnaká ako príkaz SQL, takže sa naň pozrite vo vzťahu k SQL pre podrobnosti. "Win32_QuickFixEngineering" predstavuje aktualizáciu, ktorá sa vzťahuje na aktuálny operačný systém.

Vykoná vyhľadávanie v dotaze WMI zadanom vyššie v "query.Get() a vráti výsledky ako ".ManagementObjectCollection

Keďže "" uvádza informácie o aktualizácii, dostaneme "" do prednej časti a v dôsledku toho napíšeme jedinečný identifikátor z parametra "HotFixID".ManagementObjectCollectionManagementObject

作成されたフォルダ

Keď to urobíte, identifikátory aktualizácií sú uvedené tak, ako je to znázornené na obrázku.

Ako vidíte, keď ho spustíte, je pomalý iba pri prvom spustení. Po druhom čase je to primerane skoro.

Nie je jasné.dll či sa System.Management načítava a spracováva pomaly alebo je vykonávanie dotazov WMI pomalé, ale skutočnosť, že je pomalá, sa nemení, takže ak sa obávate latencie pri jeho používaní, myslím si, že je potrebné prijať opatrenia, ako je asynchrónne vykonávanie.