Gunakan WMI untuk menentukan status pemasangan kemas kini Windows
Ringkasan
Gunakan WMI untuk menyemak kemas kini (dalam KB) yang dipasang pada Windows yang sedang anda gunakan.
Persekitaran Operasi
Persekitaran pemeriksaan operasi
Versi Windows |
|
Versi .NET Framework |
|
Keperluan sistem diperlukan
Versi Windows |
|
Versi .NET Framework |
|
Bahan
Apa itu 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.
- Instrumen Pengurusan Windows (daripada Wikipedia)
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.
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.
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
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"ManagementObjectCollection
ManagementObject
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.