Gunakan WMI untuk menentukan status pemasangan kemas kini Windows

Laman dikemaskini :
Tarikh penciptaan halaman :

Ringkasan

Gunakan WMI untuk menyemak kemas kini (dalam KB) yang dipasang pada Windows yang sedang anda gunakan.

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

Persekitaran Operasi

Persekitaran pemeriksaan operasi

Versi Windows
  • Windows 7 Ultimate
  • Windows Vista Business
Versi .NET Framework
  • 3.5 SP1
  • 4

Keperluan sistem diperlukan

Versi Windows
  • Windows 98 atau lebih baru (tetapi tidak semua disahkan)
Versi .NET Framework
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

Bahan

Apa itu KB?

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

KB juga digunakan sebagai singkatan untuk ungkapan "kilobait" atau "papan kekunci", jadi saya tidak fikir ia adalah perkataan yang digunakan untuk orang awam, tetapi kemas kini seperti sokongan keselamatan Windows dan pembetulan pepijat kadangkala dirujuk sebagai "KB" selepas dua huruf pertama ID.

Setiap kemas kini ini diberikan ID dan dinyatakan dalam format "KBXXXXXXX" di mana XXXXXX adalah sebarang nombor. Bilangan digit tidak tetap). Walau bagaimanapun, perhatikan bahawa tidak semua kemas kini mengikuti format ini.

Dengan cara ini, nama asal "KB" ini ialah "Microsoft Knowledge Base" dan sepadan dengan ID artikel teknikal yang diterbitkan oleh Microsoft di Web. Sebagai contoh, jika ia adalah kemas kini kepada KB980218, artikel teknikal yang sepadan ialah http://support.microsoft.com/?kbid=980218".

Program yang mencari status pemasangan KB

Walaupun sampel diterangkan dalam Visual Studio 2010 dan WPF, program pemeriksaan KB juga boleh digunakan dalam aplikasi Visual Studio, Windows Form dan konsol yang terdahulu. Dalam artikel ini, kami akan menggunakan Windows Management Instrumentation (WMI) untuk menyemak pemasangan KB.

Menambah Rujukan

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

Untuk menggunakan WMI, anda menggunakan kelas ManagementObjectSearcher dan ManagementObject, tetapi anda mesti merujuk kepada System.Management .dll untuk menggunakan kelas-kelas ini.

Untuk projek C#, klik kanan Rujukan daripada Penjelajah Penyelesaian dan pilih Tambah Rujukan.

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

Apabila dialog Tambah Rujukan muncul, klik pada ". Dari tab NET, pilih System.Management dan klik okey butang.

OK jika "System.Management" ditambahkan pada rujukan Solution Explorer.

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

Jika VB.NET membuka sifat projek, klik "Semak imbas" dari tab di sebelah kiri, klik butang Tambah di sebelah kanan. Seperti di atas, Tambah Rujukan dialog dipaparkan, jadi pilih "Sistem.Pengurusan" dan klik OK butang.

Jika anda kembali ke skrin sebelumnya dan menambah "Sistem.Pengurusan" ke senarai tengah, tidak mengapa.

Juga, semak "System.Management" dari senarai di bawah untuk meninggalkan penerangan ruang nama dalam program anda.

Selain itu, walaupun tidak berkaitan dengan petua asal, sampel ini menggunakan kelas StringBuilder, jadi saya juga menyemak ruang nama "Sistem.Teks". (VB.NET sahaja)

Adegan

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

Skrin yang digunakan dalam sampel ini adalah skrin mudah dengan butang pelaksanaan untuk menyemak status pemasangan KB dan kotak teks yang memaparkan hasilnya.

Saya membuatnya dalam WPF, tetapi skrin yang sama boleh dikonfigurasikan dalam Bentuk Windows.

Program

C ManagementObjectSearcher # menambah ""using System.Management; pada permulaan kod untuk mengurangkan perihalan kelas dan ruang nama lain. Dalam VB.NET, anda menyatakan bahawa ruang nama harus diimport dalam sifat projek, jadi anda tidak perlu menulis apa-apa yang istimewa, tetapi jika anda belum melakukannya, anda perlu menambah ".Imports System.Management

* Dalam kedua-dua C # dan VB.NET, jika semua nama kelas ditulis dari ruang nama seperti "System.Management.ManagementObjectSearcher", spesifikasi di atas tidak diperlukan.

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

Berikut adalah kod yang mencari dan menyenaraikan KB yang dipasang.

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 dalam baris pertama adalah kotak teks untuk memaparkan hasil yang diperolehi.

menciptanew ManagementObjectSearcher contoh kelas carian objek terurus dan mengeset pertanyaan WMI sebagai argumen. Sintaks pertanyaan hampir sama dengan kenyataan SQL, jadi lihatlah ia berhubung dengan SQL untuk butiran. "Win32_QuickFixEngineering" mewakili kemas kini yang digunakan pada sistem pengendalian semasa.

Menjalankan carian pada pertanyaan WMI yang dinyatakan sebelum ini dalam "query.Get() dan mengembalikan hasil sebagai ".ManagementObjectCollection

Oleh kerana "" menyenaraikan maklumat kemas kini, kami mendapat "" dalam setiap satu dan menulis pengecam unik daripada parameter "HotFixID"ManagementObjectCollectionManagementObject sebagai hasilnya.

作成されたフォルダ

Apabila anda melakukan ini, ID kemas kini disenaraikan seperti yang ditunjukkan dalam gambar.

Seperti yang anda lihat apabila anda menjalankannya, ia perlahan hanya pada larian pertama. Selepas kali kedua, ia agak awal.

Tidak jelas sama ada System.Management.dll lambat memuatkan dan memproses atau pelaksanaan pertanyaan WMI lambat, tetapi hakikat bahawa lambat tidak berubah, jadi jika anda bimbang tentang kependaman ketika menggunakannya, saya fikir perlu mengambil langkah-langkah seperti pelaksanaan tak segerak.