Utilizzare WMI per determinare lo stato di installazione degli aggiornamenti di Windows
sommario
Utilizzare WMI per verificare la disponibilità di aggiornamenti (in KB) installati in Windows attualmente in uso.
Ambiente operativo
Ambiente di controllo del funzionamento
Versione Windows |
|
Versione di .NET Framework |
|
Requisiti di sistema richiesti
Versione Windows |
|
Versione di .NET Framework |
|
sostanza
Che cos'è KB?
KB è anche usato come abbreviazione per l'espressione "kilobyte" o "tastiera", quindi non penso che sia una parola usata per il pubblico in generale, ma aggiornamenti come il supporto di sicurezza di Windows e le correzioni di bug sono a volte indicati come "KB" dopo le prime due lettere dell'ID.
A ciascuno di questi aggiornamenti viene assegnato un ID e specificato nel formato "KBXXXXXXX" dove XXXXXX è un numero qualsiasi. Il numero di cifre non è fisso). Si noti, tuttavia, che non tutti gli aggiornamenti seguono questo formato.
A proposito, il nome originale di questa "KB" è "Microsoft Knowledge Base" e corrisponde all'ID dell'articolo tecnico pubblicato da Microsoft sul Web. Ad esempio, se si tratta di un aggiornamento a KB980218, l'articolo tecnico corrispondente è http://support.microsoft.com/?kbid=980218".
Programmi che cercano lo stato di installazione KB
Sebbene gli esempi siano descritti in Visual Studio 2010 e WPF, i programmi di controllo KB possono essere usati anche nelle app Visual Studio, Windows Form e console precedenti. In questo articolo verrà utilizzata Strumentazione gestione Windows (WMI) per verificare l'installazione KB.
- Strumentazione gestione Windows (da Wikipedia)
Aggiunta di riferimenti
Per utilizzare WMI, è necessario utilizzare le classi ManagementObjectSearcher e ManagementObject, ma è necessario fare riferimento a System.Management .dll per utilizzare queste classi.
Per i progetti C#, fare clic con il pulsante destro del mouse su Riferimenti da Esplora soluzioni e scegliere Aggiungi riferimenti.
Quando viene visualizzata la finestra di dialogo Aggiungi riferimento, fare clic su ". Nella scheda NET selezionare System.Management e fare clic sul pulsante OK.
OK se "System.Management" viene aggiunto al riferimento di Esplora soluzioni.
Se VB.NET aprire le proprietà del progetto, fai clic su "Sfoglia" dalla scheda a sinistra, fai clic sul pulsante Aggiungi a destra. Come sopra, viene visualizzata la finestra di dialogo Aggiungi riferimento, quindi selezionare "System.Management" e fare clic sul pulsante OK.
Se si torna alla schermata precedente e si aggiunge "System.Management" all'elenco centrale, è OK.
Inoltre, selezionare "System.Management" dall'elenco seguente per omettere le descrizioni dello spazio dei nomi nel programma.
Inoltre, sebbene non sia correlato ai suggerimenti originali, questo esempio utilizza la classe StringBuilder, quindi ho anche controllato lo spazio dei nomi "System.Text". (solo VB.NET)
scena
La schermata utilizzata in questo esempio è una semplice schermata con un pulsante di esecuzione per controllare lo stato di installazione della KB e una casella di testo che visualizza i risultati.
Lo sto facendo in WPF, ma la stessa schermata è configurabile in Windows Form.
programma
C ManagementObjectSearcher
# aggiunge ""using System.Management;
all'inizio del codice per ridurre la descrizione delle classi e di altri spazi dei nomi. In VB.NET, hai specificato che lo spazio dei nomi deve essere importato nelle proprietà del progetto, quindi non è necessario scrivere nulla di speciale, ma se non l'hai fatto, devi aggiungere ".Imports System.Management
* Sia in C# che in VB.NET, se tutti i nomi di classe sono scritti da uno spazio dei nomi come "System.Management.ManagementObjectSearcher
", la specifica di cui sopra non è necessaria.
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」追加)
Di seguito è riportato il codice che cerca ed elenca i KB installati.
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()
Il ""ResultTextBox
nella prima riga è una casella di testo per la visualizzazione dei risultati ottenuti.
creanew ManagementObjectSearcher
un'istanza della classe di ricerca dell'oggetto gestito e imposta la query WMI come argomento. La sintassi di una query è quasi uguale a un'istruzione SQL, quindi esaminala in relazione a SQL per i dettagli. "Win32_QuickFixEngineering" rappresenta un aggiornamento che si applica al sistema operativo corrente.
Esegue una ricerca sulla query WMI specificata in precedenza in "query.Get()
e restituisce i risultati come ".ManagementObjectCollection
Poiché "" elenca le informazioni di aggiornamento, otteniamo "" in foreach e scriviamo un identificatore univoco dal parametro "HotFixID"ManagementObjectCollection
ManagementObject
come risultato.
Quando si esegue questa operazione, gli ID di aggiornamento vengono elencati come illustrato nella figura.
Come puoi vedere quando lo esegui, è lento solo alla prima esecuzione. Dopo la seconda volta, è ragionevolmente presto.
Non è chiaro se System.Management.dll sia lento da caricare ed elaborare o l'esecuzione di query WMI sia lenta, ma il fatto che sia lento non cambia, quindi se sei preoccupato per la latenza quando lo usi, penso che sia necessario adottare misure come l'esecuzione asincrona.