استخدام WMI لتحديد حالة تثبيت تحديثات Windows

تحديث الصفحة :
تاريخ إنشاء الصفحة :

ملخص

استخدم WMI للتحقق من وجود تحديثات (بالكيلوبايت) مثبتة على Windows الذي تستخدمه حاليا.

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

بيئة التشغيل

بيئة فحص التشغيل

إصدار ويندوز
  • ويندوز 7 في نهاية المطاف
  • ويندوز فيستا الأعمال
إصدار .NET Framework
  • 3.5 حزمة الخدمة SP1
  • 4

متطلبات النظام المطلوبة

إصدار ويندوز
  • نظام التشغيل Windows 98 أو إصدار أحدث (ولكن ليس كل ما تم تأكيده)
إصدار .NET Framework
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

مادة

ما هو KB؟

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

يستخدم KB أيضا كاختصار للتعبير "كيلوبايت" أو "لوحة المفاتيح" ، لذلك لا أعتقد أنها كلمة تستخدم لعامة الناس ، ولكن التحديثات مثل دعم أمان Windows وإصلاحات الأخطاء يشار إليها أحيانا باسم "KB" بعد أول حرفين من المعرف.

يتم تعيين معرف لكل من هذه التحديثات وتحديده بالتنسيق "KBXXXXXXX" حيث XXXXXX هو أي رقم. عدد الأرقام غير ثابت). ومع ذلك، لاحظ أنه لا تتبع جميع التحديثات هذا التنسيق.

بالمناسبة ، الاسم الأصلي لهذا "KB" هو "قاعدة معارف Microsoft" ويطابق معرف المقالة الفنية التي نشرتها Microsoft على الويب. على سبيل المثال ، إذا كان تحديثا ل KB980218 ، فإن المقالة الفنية المقابلة هي http://support.microsoft.com/?kbid=980218".

البرامج التي تبحث عن حالة تثبيت KB

على الرغم من وصف العينات في Visual Studio 2010 و WPF، يمكن أيضا استخدام برامج التحقق من قاعدة المعارف في تطبيقات Visual Studio و Windows Form ووحدة التحكم السابقة. في هذه المقالة، سنستخدم أجهزة إدارة Windows (WMI) للتحقق من تثبيت قاعدة المعارف.

إضافة مراجع

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

لاستخدام WMI، يمكنك استخدام فئتي ManagementObjectSearcher و ManagementObject، ولكن يجب الرجوع إلى System.Management .dll لاستخدام هذه الفئات.

بالنسبة لمشاريع C#، انقر بزر الماوس الأيمن فوق مراجع من مستكشف الحلول واختر إضافة مراجع.

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

عندما يظهر مربع الحوار "إضافة مرجع" ، انقر فوق ". من علامة التبويب NET، حدد System.Management وانقر فوق الزر موافق ( OK) .

موافق إذا تمت إضافة "System.Management" إلى مرجع "مستكشف الحلول".

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

إذا VB.NET فتح خصائص المشروع ، فانقر فوق "استعراض" من علامة التبويب الموجودة على اليسار ، وانقر فوق الزر "إضافة" على اليمين. كما هو موضح أعلاه ، يتم عرض مربع الحوار إضافة مرجع ، لذا حدد "System.Management" وانقر فوق الزر موافق ( OK) .

إذا عدت إلى الشاشة السابقة وأضفت "System.Management" إلى القائمة الوسطى ، فلا بأس بذلك.

أيضا ، تحقق من "System.Management" من القائمة أدناه لحذف أوصاف مساحة الاسم في برنامجك.

أيضا ، على الرغم من أنه لا يرتبط بالنصائح الأصلية ، إلا أن هذا النموذج يستخدم فئة StringBuilder ، لذلك راجعت أيضا مساحة الاسم "System.Text". (VB.NET فقط)

مشهد

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

الشاشة المستخدمة في هذا النموذج هي شاشة بسيطة مع زر تنفيذ للتحقق من حالة تثبيت KB ومربع نص يعرض النتائج.

أقوم بإنشائه في WPF ، ولكن نفس الشاشة قابلة للتكوين في نموذج Windows.

برنامج

ManagementObjectSearcher C # يضيف ""using System.Management; إلى بداية التعليمات البرمجية لتقليل وصف الفئات ومساحات الأسماء الأخرى. في VB.NET ، حددت أنه يجب استيراد مساحة الاسم في خصائص المشروع ، لذلك لا تحتاج إلى كتابة أي شيء خاص ، ولكن إذا لم تكن قد فعلت ذلك ، فأنت بحاجة إلى إضافة ".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」追加)

فيما يلي التعليمة البرمجية التي تبحث في قاعدة المعارف المثبتة وتدرجها.

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 بطيء ، ولكن حقيقة أنه بطيء لا يتغير ، لذلك إذا كنت قلقا بشأن الكمون عند استخدامه ، أعتقد أنه من الضروري اتخاذ تدابير مثل التنفيذ غير المتزامن.