Windows अद्यतनों की स्थापना स्थिति निर्धारित करने के लिए WMI का उपयोग करें
सारांश
आपके द्वारा वर्तमान में उपयोग किए जा रहे Windows पर स्थापित अद्यतनों (KB में) की जाँच करने के लिए WMI का उपयोग करें।
ऑपरेटिंग वातावरण
ऑपरेशन जाँच वातावरण
विंडोज संस्करण |
|
.NET फ्रेमवर्क संस्करण |
|
आवश्यक सिस्टम आवश्यकताएँ
विंडोज संस्करण |
|
.NET फ्रेमवर्क संस्करण |
|
पदार्थ
केबी क्या है?
केबी का उपयोग अभिव्यक्ति "किलोबाइट" या "कीबोर्ड" के लिए संक्षिप्त नाम के रूप में भी किया जाता है, इसलिए मुझे नहीं लगता कि यह आम जनता के लिए उपयोग किया जाने वाला शब्द है, लेकिन विंडोज सुरक्षा समर्थन और बग फिक्स जैसे अपडेट को कभी-कभी आईडी के पहले दो अक्षरों के बाद "केबी" कहा जाता है।
इनमें से प्रत्येक अद्यतन को एक आईडी असाइन किया गया है और "KBXXXXXXXXXX" प्रारूप में निर्दिष्ट किया गया है जहाँ XXXXXXX किसी भी संख्या है। अंकों की संख्या निश्चित नहीं है)। हालाँकि, ध्यान दें कि सभी अद्यतन इस स्वरूप का पालन नहीं करते हैं।
वैसे, इस "KB" का मूल नाम "Microsoft नॉलेज बेस" है और वेब पर Microsoft द्वारा प्रकाशित तकनीकी आलेख की ID से मेल खाता है। उदाहरण के लिए, यदि यह KB980218 के लिए अद्यतन है, तो संगत तकनीकी आलेख है http://support.microsoft.com/?kbid=980218"
KB स्थापना स्थिति के लिए खोज करने वाले प्रोग्राम
यद्यपि नमूने विजुअल स्टूडियो 2010 और डब्ल्यूपीएफ में वर्णित हैं, केबी-चेकिंग प्रोग्राम का उपयोग पहले विजुअल स्टूडियो, विंडोज फॉर्म और कंसोल ऐप्स में भी किया जा सकता है। इस लेख में, हम केबी इंस्टॉलेशन की जांच करने के लिए विंडोज मैनेजमेंट इंस्ट्रूमेंटेशन (डब्ल्यूएमआई) का उपयोग करेंगे।
- विंडोज मैनेजमेंट इंस्ट्रूमेंटेशन (विकिपीडिया से)
संदर्भ जोड़ना
WMI का उपयोग करने के लिए, आप प्रबंधन ऑब्जेक्टसर्चर और प्रबंधन ऑब्जेक्ट वर्गों का उपयोग करें, लेकिन आपको इन वर्गों का उपयोग करने के लिए सिस्टम.मैनेजमेंट .dll को संदर्भित करना होगा।
C# प्रोजेक्ट्स के लिए, समाधान एक्सप्लोरर से संदर्भराइट-क्लिक करें और संदर्भ जोड़ें चुनें.
जब संदर्भ जोड़ें संवाद प्रकट होता है, तो "पर क्लिक करें। NET टैब से, सिस्टम.मैनेजमेंट का चयन करें और ठीक बटन क्लिक करें।
ठीक है अगर "सिस्टम.मैनेजमेंट" समाधान एक्सप्लोरर संदर्भ में जोड़ा जाता है।
यदि VB.NET प्रोजेक्ट गुण खोलते हैं, तो बाईं ओर टैब से "ब्राउज़ करें" पर क्लिक करें, दाईं ओर जोड़ें बटन पर क्लिक करें। ऊपर के रूप में, संदर्भ जोड़ें संवाद प्रदर्शित होता है, इसलिए "सिस्टम.मैनेजमेंट" चुनें और ठीक बटन पर क्लिक करें।
यदि आप पिछली स्क्रीन पर लौटते हैं और मध्य सूची में "सिस्टम.मैनेजमेंट" जोड़ते हैं, तो यह ठीक है।
इसके अलावा, अपने प्रोग्राम में नामस्थान विवरण छोड़ने के लिए नीचे दी गई सूची से "सिस्टम.मैनेजमेंट" की जांच करें।
इसके अलावा, हालांकि यह मूल युक्तियों से संबंधित नहीं है, यह नमूना स्ट्रिंगबिल्डर वर्ग का उपयोग करता है, इसलिए मैंने "सिस्टम.टेक्स्ट" नामस्थान की भी जांच की। (केवल VB.NET)
दृश्य
इस नमूने में उपयोग की जाने वाली स्क्रीन केबी की स्थापना स्थिति और परिणाम प्रदर्शित करने वाले पाठ बॉक्स की जांच करने के लिए निष्पादन बटन के साथ एक साधारण स्क्रीन है।
मैं इसे डब्ल्यूपीएफ में बना रहा हूं, लेकिन वही स्क्रीन विंडोज फॉर्म में कॉन्फ़िगर करने योग्य है।
प्रोग्राम
सी ManagementObjectSearcher
# कक्षाओं और अन्य नामस्थानों के विवरण को कम करने के लिए कोड की शुरुआत में ""using System.Management;
जोड़ता है। VB.NET में, आपने निर्दिष्ट किया है कि प्रोजेक्ट गुणों में नामस्थान आयात किया जाना चाहिए, इसलिए आपको कुछ विशेष लिखने की आवश्यकता नहीं है, लेकिन यदि आपने ऐसा नहीं किया है, तो आपको जोड़ने की आवश्यकता है "।Imports System.Management
* सी # और 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
प्राप्त परिणामों को प्रदर्शित करने के लिए एक पाठ बॉक्स है।
प्रबंधित ऑब्जेक्ट के खोज वर्ग की एक आवृत्ति बनाता है और WMI क्वेरी को तर्क के रूप में सेट करताnew ManagementObjectSearcher
है। क्वेरी का सिंटैक्स लगभग एसक्यूएल स्टेटमेंट के बराबर है, इसलिए विवरण के लिए एसक्यूएल के संबंध में इसे देखें। "Win32_QuickFixEngineering" वर्तमान ऑपरेटिंग सिस्टम पर लागू होता है जो एक अद्यतन का प्रतिनिधित्व करता है।
में पहले निर्दिष्ट WMI क्वेरी पर एक खोज करता है " और परिणाम ों को "query.Get()
के रूप में देता है।ManagementObjectCollection
चूंकि "" अपडेट जानकारी को सूचीबद्ध करता है, इसलिए हम फोरच में "" प्राप्त करते हैं और परिणामस्वरूप " हॉटफिक्सआईडी "ManagementObjectCollection
ManagementObject
पैरामीटर से एक अद्वितीय पहचानकर्ता लिखते हैं।
जब आप ऐसा करते हैं, तो अद्यतन आईडी को आकृति में दिखाए गए अनुसार सूचीबद्ध किया जाता है।
जैसा कि आप देख सकते हैं कि जब आप इसे चलाते हैं, तो यह केवल पहले रन पर धीमा होता है। दूसरी बार के बाद, यह काफी जल्दी है।
यह स्पष्ट नहीं है कि सिस्टम.मैनेजमेंट.dll लोड करने और संसाधित करने के लिए धीमा है या डब्ल्यूएमआई क्वेरी निष्पादन धीमा है, लेकिन तथ्य यह है कि यह धीमा है, इसलिए यदि आप इसका उपयोग करते समय विलंबता के बारे में चिंतित हैं, तो मुझे लगता है कि अतुल्यकालिक निष्पादन जैसे उपाय करना आवश्यक है।