A Windows-frissítések telepítési állapotának meghatározásához használja a WMI-t
összefoglalás
A WMI segítségével keresse meg a jelenleg használt Windowsra telepített frissítéseket (KB-ban).
Működési környezet
Művelet-ellenőrzési környezet
Windows verzió |
|
NET-keretrendszer verziója |
|
Rendszerkövetelmények szükségesek
Windows verzió |
|
NET-keretrendszer verziója |
|
lényeg
Mi az a KB?
A KB-t a "kilobájt" vagy a "billentyűzet" kifejezés rövidítéseként is használják, így nem hiszem, hogy ez egy olyan szó, amelyet a nagyközönség számára használnak, de az olyan frissítéseket, mint a Windows biztonsági támogatása és a hibajavítások, néha "KB" -nak nevezik az azonosító első két betűje után.
Mindegyik frissítéshez hozzá van rendelve egy azonosító, és a "KBXXXXXXX" formátumban van megadva, ahol XXXXXX bármilyen szám. A számjegyek száma nincs rögzítve). Ne feledje azonban, hogy nem minden frissítés követi ezt a formátumot.
Egyébként ennek a "KB"-nak az eredeti neve "Microsoft Tudásbázis", és megegyezik a Microsoft által az interneten közzétett műszaki cikk azonosítójával. http://support.microsoft.com/?kbid=980218".
A KB telepítési állapotát kereső programok
Bár a mintákat a Visual Studio 2010 és a WPF írja le, a TUDÁSBÁZIS-ellenőrző programok a korábbi Visual Studio-, Windows-űrlap- és konzolalkalmazásokban is használhatók. Ebben a cikkben a Windows Management Instrumentation (WMI) használatával ellenőrizzük a tudásbázis telepítését.
- Windows Management Instrumentation (a Wikipédiából)
Referenciák hozzáadása
A WMI használatához a ManagementObjectSearcher és a ManagementObject osztályokat kell használnia, de ezeknek az osztályoknak a használatához a System.Management .dll kell hivatkoznia.
C#-projektek esetén kattintson a jobb gombbal a Hivatkozások elemre a Megoldáskezelőben, és válassza a Hivatkozások hozzáadása lehetőséget.
Amikor megjelenik a Hivatkozás hozzáadása párbeszédpanel, kattintson a ". A NET lapon válassza a System.Management lehetőséget, majd kattintson az OK gombra.
OK, ha a "System.Management" hozzá van adva a Megoldáskezelő hivatkozáshoz.
Ha VB.NET megnyitni a projekt tulajdonságait, kattintson a bal oldali fülön a "Tallózás" gombra, kattintson a jobb oldalon található Hozzáadás gombra. Mint fent, megjelenik a Hivatkozás hozzáadása párbeszédpanel, ezért válassza a "System.Management" lehetőséget, majd kattintson az OK gombra.
Ha visszatér az előző képernyőre, és hozzáadja a "System.Management" -et a középső listához, az rendben van.
Ezenkívül jelölje be a "System.Management" elemet az alábbi listából, hogy kihagyja a névtérleírásokat a programból.
Továbbá, bár nem kapcsolódik az eredeti tippekhez, ez a minta a StringBuilder osztályt használja, ezért ellenőriztem a "System.Text" névteret is. (csak VB.NET)
jelenet
A mintában használt képernyő egy egyszerű képernyő, amely egy végrehajtási gombbal rendelkezik a KB telepítési állapotának ellenőrzéséhez, valamint egy szövegmezővel, amely megjeleníti az eredményeket.
WPF-ben készítem, de ugyanaz a képernyő konfigurálható Windows Formában.
program
A C ManagementObjectSearcher
# hozzáadja a "" szótusing System.Management;
a kód elejéhez, hogy csökkentse az osztályok és más névterek leírását. A VB.NET megadotta, hogy a névteret importálni kell a projekt tulajdonságaiba, így nem kell semmi különlegeset írnia, de ha még nem tette meg, hozzá kell adnia a ".Imports System.Management
* Mind a C#-ban, mind a VB.NET, ha az összes osztálynevet egy olyan névtérből írják, mint a "System.Management.ManagementObjectSearcher
", akkor a fenti specifikáció nem szükséges.
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」追加)
Az alábbiakban látható az a kód, amely megkeresi és felsorolja a telepített KB-t.
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()
Az első sorban lévő ""ResultTextBox
egy szövegmező a kapott eredmények megjelenítéséhez.
létrehozzanew ManagementObjectSearcher
a felügyelt objektum keresési osztályának egy példányát, és argumentumként állítja be a WMI-lekérdezést. A lekérdezés szintaxisa majdnem megegyezik egy SQL-utasítással, ezért a részletekért tekintse meg az SQL-hez viszonyítva. A "Win32_QuickFixEngineering" az aktuális operációs rendszerre vonatkozó frissítést jelenti.
Keresést hajt végre a korábban a "query.Get()
mezőben megadott WMI-lekérdezésen, és az eredményeket ".ManagementObjectCollection
Mivel a "" felsorolja a frissítési információkat, a "" szót kapjuk az előterjesztésben, és ennek eredményeként írunk egy egyedi azonosítót a "HotFixID"ManagementObjectCollection
ManagementObject
paraméterből.
Ebben az esetben a frissítési azonosítók az ábrán látható módon jelennek meg.
Amint láthatja, amikor futtatja, csak az első futtatáskor lassú. A második alkalom után viszonylag korán van.
Nem világos, hogy a System.Management.dll lassan betölthető-e és feldolgozható-e, vagy a WMI-lekérdezések végrehajtása lassú, de az a tény, hogy lassú, nem változik, így ha aggódik a késés miatt a használat során, úgy gondolom, hogy olyan intézkedéseket kell tennie, mint az aszinkron végrehajtás.