ใช้ WMI เพื่อตรวจสอบสถานะการติดตั้งของการปรับปรุง Windows

ปรับปรุงหน้า :
วันที่สร้างเพจ :

สรุป

ใช้ WMI เพื่อตรวจสอบการปรับปรุง (ใน KB) ที่ติดตั้งบน Windows ที่คุณกําลังใช้อยู่

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

สภาพแวดล้อมการทํางาน

สภาพแวดล้อมการตรวจสอบการทํางาน

เวอร์ชั่นวินโดวส์
  • หน้าต่าง 7 ที่ดีที่สุด
  • ธุรกิจวินโดวส์วิสต้า
เวอร์ชันเฟรมเวิร์ก .NET
  • 3.5 SP1
  • 4

ความต้องการของระบบที่จําเป็น

เวอร์ชั่นวินโดวส์
  • Windows 98 หรือใหม่กว่า (แต่ไม่ได้รับการยืนยันทั้งหมด)
เวอร์ชันเฟรมเวิร์ก .NET
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

สาร

KB คืออะไร

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

KB ยังใช้เป็นตัวย่อสําหรับนิพจน์ "กิโลไบต์" หรือ "แป้นพิมพ์" ดังนั้นฉันไม่คิดว่าเป็นคําที่ใช้สําหรับประชาชนทั่วไป แต่การอัปเดตเช่นการสนับสนุนความปลอดภัยของ Windows และการแก้ไขข้อบกพร่องบางครั้งเรียกว่า "KB" หลังจากตัวอักษรสองตัวแรกของ ID

การอัปเดตแต่ละรายการเหล่านี้ถูกกําหนด ID และระบุในรูปแบบ "KBXXXXXXX" โดยที่ XXXXXX คือหมายเลขใดก็ได้ จํานวนหลักไม่คงที่) อย่างไรก็ตาม โปรดทราบว่าการอัปเดตบางอย่างไม่เป็นไปตามรูปแบบนี้

อย่างไรก็ตามชื่อเดิมของ "KB" นี้คือ "ฐานความรู้ของ Microsoft" และตรงกับ ID ของบทความทางเทคนิคที่เผยแพร่โดย Microsoft บนเว็บ ตัวอย่างเช่นหากเป็นการอัปเดตเป็น KB980218 บทความทางเทคนิคที่เกี่ยวข้องคือ http://support.microsoft.com/?kbid=980218".

โปรแกรมที่ค้นหาสถานะการติดตั้ง KB

แม้ว่าตัวอย่างจะอธิบายไว้ใน Visual Studio 2010 และ WPF โปรแกรมตรวจสอบ KB ยังสามารถใช้ใน Visual Studio ก่อนหน้านี้ ฟอร์ม Windows และแอปคอนโซล ในบทความนี้เราจะใช้เครื่องมือการจัดการ Windows (WMI) เพื่อตรวจสอบการติดตั้ง KB

การเพิ่มการอ้างอิง

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

เมื่อต้องการใช้ WMI คุณสามารถใช้คลาส ManagementObjectSearcher และ ManagementObject แต่คุณต้องอ้างอิงถึง.dllการจัดการระบบเพื่อใช้คลาสเหล่านี้

สําหรับโครงการ C# ให้คลิกขวาที่ การอ้างอิงจากโซลูชัน Explorer แล้วเลือก เพิ่มการอ้างอิง

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

เมื่อกล่องโต้ตอบเพิ่มการอ้างอิงปรากฏขึ้นให้คลิกที่ ". จากแท็บ NET เลือก System.Management และคลิกที่ ตกลง ปุ่ม.

ตกลงถ้ามีการเพิ่ม "System.Management" ลงในการอ้างอิงตัวสํารวจโซลูชัน

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

หาก VB.NET เปิดคุณสมบัติโครงการให้คลิก "เรียกดู" จากแท็บทางด้านซ้ายคลิกปุ่มเพิ่มทางด้านขวา ดังข้างต้นกล่องโต้ตอบเพิ่มการอ้างอิงจะปรากฏขึ้นดังนั้นเลือก "System.Management" และคลิกที่ OK ปุ่ม.

หากคุณกลับไปที่หน้าจอก่อนหน้าและเพิ่ม "System.Management" ลงในรายการกลางก็โอเค

นอกจากนี้ให้ตรวจสอบ "System.Management" จากรายการด้านล่างเพื่อละเว้นคําอธิบาย namespace ในโปรแกรมของคุณ

นอกจากนี้แม้ว่าจะไม่เกี่ยวข้องกับเคล็ดลับดั้งเดิม แต่ตัวอย่างนี้ใช้คลาส StringBuilder ดังนั้นฉันจึงตรวจสอบเนมสเปซ "System.Text" ด้วย (VB.NET เท่านั้น)

ฉาก

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

หน้าจอที่ใช้ในตัวอย่างนี้เป็นหน้าจออย่างง่ายที่มีปุ่มดําเนินการเพื่อตรวจสอบสถานะการติดตั้งของ KB และกล่องข้อความที่แสดงผลลัพธ์

ฉันทํามันใน WPF แต่หน้าจอเดียวกันสามารถกําหนดค่าได้ในแบบฟอร์ม Windows

โปรแกรม

C ManagementObjectSearcher # เพิ่ม ""using System.Management; ที่จุดเริ่มต้นของรหัสเพื่อลดคําอธิบายของคลาสและเนมสเปซอื่น ๆ ใน VB.NET คุณระบุว่าควรนําเข้า namespace ในคุณสมบัติของโครงการดังนั้นคุณไม่จําเป็นต้องเขียนอะไรเป็นพิเศษ แต่ถ้าคุณยังไม่ได้ทําคุณต้องเพิ่ม "Imports System.Management

* ทั้งใน C# และ VB.NET หากชื่อคลาสทั้งหมดเขียนจากเนมสเปซเช่น "System.Management.ManagementObjectSearcher" ไม่จําเป็นต้องใช้ข้อกําหนดข้างต้น

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

ด้านล่างนี้คือรหัสที่ค้นหาและแสดงรายการ 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 ในบรรทัดแรกเป็นกล่องข้อความสําหรับแสดงผลลัพธ์ที่ได้รับ

สร้างnew ManagementObjectSearcherอินสแตนซ์ของคลาสการค้นหาของอ็อบเจ็กต์ที่มีการจัดการ และตั้งค่าคิวรี WMI เป็นอาร์กิวเมนต์ ไวยากรณ์ของแบบสอบถามเกือบจะเท่ากับคําสั่ง SQL ดังนั้นให้ดูที่สัมพันธ์กับ SQL สําหรับรายละเอียด "Win32_QuickFixEngineering" หมายถึงการปรับปรุงที่ใช้กับระบบปฏิบัติการปัจจุบัน

ทําการค้นหาในแบบสอบถาม WMI ที่ระบุก่อนหน้านี้ใน "query.Get() และส่งกลับผลลัพธ์เป็น "ManagementObjectCollection

เนื่องจาก "" แสดงข้อมูลการอัปเดต เราจึงได้รับ "" ใน foreach และเขียนตัวระบุที่ไม่ซ้ํากันจากพารามิเตอร์ "HotFixID"ManagementObjectCollectionManagementObject เป็นผลลัพธ์

作成されたフォルダ

เมื่อคุณทําเช่นนี้ รหัสการปรับปรุงจะแสดงเป็นที่แสดงในรูป

อย่างที่คุณเห็นเมื่อคุณเรียกใช้มันจะช้าในการวิ่งครั้งแรกเท่านั้น หลังจากครั้งที่สองมันเร็วพอสมควร

ยังไม่ชัดเจนว่า System.Management.dllโหลดและประมวลผลช้าหรือการดําเนินการสืบค้น WMI ช้า แต่ความจริงที่ว่ามันช้าจะไม่เปลี่ยนแปลงดังนั้นหากคุณกังวลเกี่ยวกับเวลาแฝงเมื่อใช้งานฉันคิดว่าจําเป็นต้องใช้มาตรการต่างๆเช่นการดําเนินการแบบอะซิงโครนัส