Utiliser WMI pour déterminer l’état d’installation des mises à jour Windows

Page mise à jour :
Date de création de la page :

résumé

Utilisez WMI pour rechercher les mises à jour (en Ko) installées sur windows que vous utilisez actuellement.

KB がインストールされている番号の一覧を表示しています。

Environnement d’exploitation

Environnement de vérification des opérations

Windows Version
  • Windows 7 Édition Intégrale
  • Windows Vista Professionnel
Version du .NET Framework
  • 3.5 SP1
  • 4

Configuration système requise

Windows Version
  • Windows 98 ou version ultérieure (mais pas tous confirmés)
Version du .NET Framework
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

substance

Qu’est-ce que KB ?

インストールされている更新プログラム(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.

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.

参照の追加ダイアログで System.Management を選択して追加しています

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.

VB.NET のプロジェクトのプロパティから System.Management の参照を追加しています

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

KB チェック実行ボタンと検索結果一覧を表示するためのテキストボックスを配置

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 »ManagementObjectCollectionManagementObject 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.