Utilitzeu WMI per determinar l'estat d'instal·lació de les actualitzacions de Windows
resum
Utilitzeu WMI per comprovar si hi ha actualitzacions (en KB) instal·lades al Windows que utilitzeu actualment.
Entorn operatiu
Entorn de comprovació de l'operació
Versió de Windows |
|
Versió .NET Framework |
|
Requisits del sistema requerits
Versió de Windows |
|
Versió .NET Framework |
|
substància
Què és KB?
KB també s'utilitza com a abreviatura de l'expressió "kilobyte" o "teclat", de manera que no crec que sigui una paraula utilitzada per al públic en general, però actualitzacions com ara suport de seguretat de Windows i correccions d'errors de vegades es denominen "KB" després de les dues primeres lletres de l'identificador.
A cadascuna d'aquestes actualitzacions se li assigna un ID i s'especifica en el format "KBXXXXXX" on XXXXXX és qualsevol número. El nombre de dígits no és fix). Tingueu en compte, però, que no totes les actualitzacions segueixen aquest format.
Per cert, el nom original d'aquesta "KB" és "Microsoft Knowledge Base" i coincideix amb l'identificador de l'article tècnic publicat per Microsoft al web. Per exemple, si es tracta d'una actualització de KB980218, l'article tècnic corresponent és http://support.microsoft.com/?kbid=980218".
Programes que cerquen l'estat de la instal·lació de KB
Tot i que les mostres es descriuen al Visual Studio 2010 i al WPF, els programes de comprovació de KB també es poden utilitzar en aplicacions anteriors del Visual Studio, el Windows Form i la consola. En aquest article, utilitzarem Instrumentació d'administració de Windows (WMI) per comprovar la instal·lació de KB.
- Instrumentació de gestió de Windows (de Wikipedia)
Addició de referències
Per utilitzar WMI, utilitzeu les classes ManagementObjectSearcher i ManagementObject, però heu de consultar System.Management .dll per utilitzar aquestes classes.
Per als projectes C#, feu clic amb el botó dret a Referències de l'Explorador de solucions i trieu Afegeix referències.
Quan aparegui el diàleg Afegeix referència, feu clic a ". Des de la pestanya NET, seleccioneu System.Management i feu clic al botó D'acord.
D'acord si s'afegeix "System.Management" a la referència de l'Explorador de solucions.
Si VB.NET obrir les propietats del projecte, feu clic a "Examinar" des de la pestanya de l'esquerra, feu clic al botó Afegeix a la dreta. Com a dalt, es mostra el diàleg Afegeix referència, així que seleccioneu "Gestió del sistema" i feu clic al botó D'acord.
Si torneu a la pantalla anterior i afegiu "System.Management" a la llista mitjana, està bé.
A més, marqueu "System.Management" a la llista següent per ometre les descripcions de l'espai de noms al vostre programa.
A més, tot i que no està relacionat amb els consells originals, aquesta mostra utilitza la classe StringBuilder, de manera que també vaig comprovar l'espai de noms "System.Text". (VB.NET)
escena
La pantalla utilitzada en aquesta mostra és una pantalla senzilla amb un botó d'execució per comprovar l'estat d'instal·lació de la KB i un quadre de text que mostra els resultats.
Ho faig en WPF, però la mateixa pantalla és configurable en Windows Form.
programa
C ManagementObjectSearcher
# afegeix ""using System.Management;
al començament del codi per reduir la descripció de classes i altres espais de noms. En VB.NET, heu especificat que l'espai de noms s'ha d'importar a les propietats del projecte, de manera que no cal que escriviu res especial, però si no ho heu fet, heu d'afegir ".Imports System.Management
* Tant en C# com en VB.NET, si tots els noms de classe s'escriuen des d'un espai de noms com "System.Management.ManagementObjectSearcher
", no és necessària l'especificació anterior.
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」追加)
A continuació es mostra el codi que cerca i llista la KB instal·lada.
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()
El ""ResultTextBox
de la primera línia és un quadre de text per mostrar els resultats obtinguts.
creanew ManagementObjectSearcher
una instància de la classe de cerca de l'objecte gestionat i estableix la consulta WMI com a argument. La sintaxi d'una consulta és gairebé igual a una expressió SQL, així que mireu-la en relació amb SQL per obtenir més detalls. "Win32_QuickFixEngineering" representa una actualització que s'aplica al sistema operatiu actual.
Realitza una cerca sobre la consulta WMI especificada anteriorment en "query.Get()
i retorna els resultats com ".ManagementObjectCollection
Com que "" llista la informació d'actualització, obtenim "" en foreach i escrivim un identificador únic del paràmetre "HotFixID"ManagementObjectCollection
ManagementObject
com a resultat.
Quan ho feu, els identificadors d'actualització es mostren tal com es mostra a la figura.
Com podeu veure quan l'executeu, només és lent a la primera tirada. Després de la segona vegada, és raonablement aviat.
No està clar si System.Management.dll és lenta en la càrrega i el procés o l'execució de la consulta WMI és lenta, però el fet que sigui lenta no canvia, de manera que si us preocupa la latència a l'hora d'utilitzar-lo, crec que cal prendre mesures com l'execució asíncrona.