Używanie usługi WMI do określania stanu instalacji aktualizacji systemu Windows

Strona zaktualizowana :
Data utworzenia strony :

streszczenie

Użyj usługi WMI, aby sprawdzić dostępność aktualizacji (w KB) zainstalowanych w aktualnie używanym systemie Windows.

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

Środowisko pracy

Środowisko sprawdzania operacji

Wersja systemu Windows
  • Windows 7 Ultimate
  • Windows Vista Business
Wersja programu .NET Framework
  • 3.5 z dodatkiem SP1
  • 4

Wymagane wymagania systemowe

Wersja systemu Windows
  • Windows 98 lub nowszy (ale nie wszystkie potwierdzone)
Wersja programu .NET Framework
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

substancja

Co to jest KB?

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

KB jest również używany jako skrót dla wyrażenia "kilobyte" lub "klawiatura", więc nie sądzę, że jest to słowo używane dla ogółu społeczeństwa, ale aktualizacje, takie jak obsługa zabezpieczeń systemu Windows i poprawki błędów, są czasami określane jako "KB" po pierwszych dwóch literach identyfikatora.

Każda z tych aktualizacji ma przypisany identyfikator i jest określona w formacie "KBXXXXXXX", gdzie XXXXXX to dowolna liczba. Liczba cyfr nie jest stała). Należy jednak pamiętać, że nie wszystkie aktualizacje mają ten format.

Nawiasem mówiąc, oryginalna nazwa tego "KB" to "Baza wiedzy Microsoft Knowledge Base" i odpowiada identyfikatorowi artykułu technicznego opublikowanego przez firmę Microsoft w sieci Web. Na przykład, jeśli jest to aktualizacja do KB980218, odpowiedni artykuł techniczny to http://support.microsoft.com/?kbid=980218".

Programy wyszukujące stan instalacji KB

Chociaż przykłady są opisane w Visual Studio 2010 i WPF, programy sprawdzające KB mogą być również używane we wcześniejszych aplikacjach Visual Studio, Windows Form i konsolowych. W tym artykule użyjemy Instrumentacji zarządzania Windows (WMI), aby sprawdzić instalację kb.

Dodawanie odniesień

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

Aby korzystać z usługi WMI, należy użyć klas ManagementObjectSearcher i ManagementObject, ale należy odwołać się do system.Management .dll, aby użyć tych klas.

W przypadku projektów języka C# kliknij prawym przyciskiem myszy pozycję Odwołania z Eksploratora rozwiązań i wybierz polecenie Dodaj odwołania.

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

Gdy pojawi się okno dialogowe Dodaj odwołanie, kliknij ". Na karcie NET wybierz opcję System.Management i kliknij przycisk OK.

OK, jeśli "System.Management" zostanie dodany do odwołania Eksplorator rozwiązań.

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

Jeśli VB.NET otworzyć właściwości projektu, kliknij "Przeglądaj" na karcie po lewej stronie, kliknij przycisk Dodaj po prawej stronie. Jak wyżej, zostanie wyświetlone okno dialogowe Dodaj odwołanie, więc wybierz "System.Management" i kliknij przycisk OK.

Jeśli powrócisz do poprzedniego ekranu i dodasz "System.Management" do środkowej listy, jest OK.

Zaznacz również "System.Management" z poniższej listy, aby pominąć opisy przestrzeni nazw w swoim programie.

Ponadto, chociaż nie jest to związane z oryginalnymi wskazówkami, ten przykład używa klasy StringBuilder, więc sprawdziłem również przestrzeń nazw "System.Text". (tylko VB.NET)

scena

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

Ekran użyty w tym przykładzie jest prostym ekranem z przyciskiem wykonywania umożliwiającym sprawdzenie stanu instalacji KB i polem tekstowym wyświetlającym wyniki.

Robię to w WPF, ale ten sam ekran można skonfigurować w Windows Form.

program

C ManagementObjectSearcher # dodaje ""using System.Management; na początku kodu, aby zmniejszyć opis klas i innych przestrzeni nazw. W VB.NET określiłeś, że przestrzeń nazw powinna zostać zaimportowana we właściwościach projektu, więc nie musisz pisać nic specjalnego, ale jeśli tego nie zrobiłeś, musisz dodać ".Imports System.Management

* Zarówno w języku C#, jak i VB.NET, jeśli wszystkie nazwy klas są zapisywane z przestrzeni nazw, takiej jak "System.Management.ManagementObjectSearcher", powyższa specyfikacja nie jest konieczna.

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

Poniżej znajduje się kod, który przeszukuje i wyświetla zainstalowaną 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 w pierwszym wierszu to pole tekstowe do wyświetlania uzyskanych wyników.

tworzynew ManagementObjectSearcher wystąpienie klasy wyszukiwania obiektu zarządzanego i ustawia zapytanie WMI jako argument. Składnia zapytania jest prawie równa instrukcji SQL, więc spójrz na nią w odniesieniu do SQL, aby uzyskać szczegółowe informacje. "Win32_QuickFixEngineering" oznacza aktualizację dotyczącą bieżącego systemu operacyjnego.

Wykonuje wyszukiwanie kwerendy WMI określonej wcześniej w "query.Get() i zwraca wyniki jako ".ManagementObjectCollection

Ponieważ "" wyświetla informacje o aktualizacji, otrzymujemy "" w foreach i w rezultacie zapisujemy unikalny identyfikator z parametru "HotFixID".ManagementObjectCollectionManagementObject

作成されたフォルダ

Po wykonaniu tej czynności identyfikatory aktualizacji zostaną wyświetlone w sposób pokazany na rysunku.

Jak widać po uruchomieniu, jest powolny tylko przy pierwszym uruchomieniu. Po raz drugi jest dość wcześnie.

Nie jest jasne, czy System.Management.dll jest powolny w ładowaniu i przetwarzaniu, czy wykonywanie zapytań WMI jest powolne, ale fakt, że jest powolny, nie zmienia się, więc jeśli martwisz się opóźnieniem podczas korzystania z niego, myślę, że konieczne jest podjęcie środków takich jak asynchroniczne wykonanie.