Utiliser WMI pour déterminer l’état d’installation des mises à jour Windows
résumé
Utilisez WMI pour rechercher les mises à jour (en Ko) installées sur windows que vous utilisez actuellement.
Environnement d’exploitation
Environnement de vérification des opérations
Windows Version |
|
Version du .NET Framework |
|
Configuration système requise
Windows Version |
|
Version du .NET Framework |
|
substance
Qu’est-ce que KB ?
KB est également utilisé comme abréviation de l’expression « kilobyte » ou « keyboard », donc je ne pense pas que ce soit un mot utilisé pour le grand public, mais les mises à jour telles que la prise en charge de la sécurité Windows et les corrections de bogues sont parfois appelées « KB » après les deux premières lettres de l’ID.
Chacune de ces mises à jour se voit attribuer un ID et est spécifiée au format « KBXXXXXXX » où XXXXXX est un nombre quelconque. Le nombre de chiffres n’est pas fixe). Notez toutefois que toutes les mises à jour ne suivent pas ce format.
Soit dit en passant, le nom d’origine de cette « Ko » est « Base de connaissances Microsoft » et correspond à l’ID de l’article technique publié par Microsoft sur le Web. Par exemple, s’il s’agit d’une mise à jour de KB980218, l’article technique correspondant est http://support.microsoft.com/?kbid=980218 ».
Programmes qui recherchent l’état d’installation de la base de connaissances
Bien que les exemples soient décrits dans Visual Studio 2010 et WPF, les programmes de vérification de la base de connaissances peuvent également être utilisés dans les applications Visual Studio, Windows Form et console antérieures. Dans cet article, nous allons utiliser WMI (Windows Management Instrumentation) pour vérifier l’installation de la base de connaissances.
- Windows Management Instrumentation (tiré de Wikipedia)
Ajout de références
Pour utiliser WMI, vous utilisez les classes ManagementObjectSearcher et ManagementObject, mais vous devez vous référer à System.Management .dll pour utiliser ces classes.
Pour les projets C#, cliquez avec le bouton droit sur Références dans l’Explorateur de solutions et choisissez Ajouter des références.
Lorsque la boîte de dialogue Ajouter une référence apparaît, cliquez sur « . Dans l’onglet NET, sélectionnez System.Management et cliquez sur le bouton OK.
OK si « System.Management » est ajouté à la référence de l’Explorateur de solutions.
Si VB.NET ouvrir les propriétés du projet, cliquez sur « Parcourir » dans l’onglet de gauche, cliquez sur le bouton Ajouter à droite. Comme ci-dessus, la boîte de dialogue Ajouter une référence s’affiche, alors sélectionnez « System.Management » et cliquez sur le bouton OK.
Si vous revenez à l’écran précédent et ajoutez « System.Management » à la liste du milieu, c’est OK.
Vérifiez également « System.Management » dans la liste ci-dessous pour omettre les descriptions d’espace de noms dans votre programme.
De plus, bien qu’il ne soit pas lié aux conseils d’origine, cet exemple utilise la classe StringBuilder, j’ai donc également vérifié l’espace de noms " System.Text ». (VB.NET seulement)
scène
L’écran utilisé dans cet exemple est un écran simple avec un bouton d’exécution pour vérifier l’état d’installation de la Base de connaissances et une zone de texte qui affiche les résultats.
Je le fais dans WPF, mais le même écran est configurable dans Windows Form.
programme
C ManagementObjectSearcher
# ajoute « »using System.Management;
au début du code pour réduire la description des classes et autres espaces de noms. Dans VB.NET, vous avez spécifié que l’espace de noms doit être importé dans les propriétés du projet, vous n’avez donc pas besoin d’écrire quoi que ce soit de spécial, mais si vous ne l’avez pas fait, vous devez ajouter « .Imports System.Management
* En C# et VB.NET, si tous les noms de classe sont écrits à partir d’un espace de noms tel que « System.Management.ManagementObjectSearcher
», la spécification ci-dessus n’est pas nécessaire.
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」追加)
Vous trouverez ci-dessous le code qui recherche et répertorie la base de connaissances installée.
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()
Le « »ResultTextBox
dans la première ligne est une zone de texte permettant d’afficher les résultats obtenus.
créenew ManagementObjectSearcher
une instance de la classe de recherche de l’objet géré et définit la requête WMI comme argument. La syntaxe d’une requête est presque égale à une instruction SQL, alors regardez-la par rapport à SQL pour plus de détails. « Win32_QuickFixEngineering » représente une mise à jour qui s’applique au système d’exploitation actuel.
Effectue une recherche sur la requête WMI spécifiée précédemment dans "query.Get()
et renvoie les résultats sous la forme « .ManagementObjectCollection
Puisque « » répertorie les informations de mise à jour, nous obtenons « » dans foreach et écrivons un identifiant unique à partir du paramètre « HotFixID »ManagementObjectCollection
ManagementObject
en conséquence.
Lorsque vous effectuez cette opération, les ID de mise à jour sont répertoriés comme illustré dans la figure.
Comme vous pouvez le voir lorsque vous l’exécutez, il n’est lent qu’à la première exécution. Après la deuxième fois, il est raisonnablement tôt.
Il n’est pas clair si System.Management.dll est lent à charger et à traiter ou si l’exécution de requêtes WMI est lente, mais le fait qu’il soit lent ne change pas, donc si vous vous inquiétez de la latence lors de son utilisation, je pense qu’il est nécessaire de prendre des mesures telles que l’exécution asynchrone.