Windows güncelleştirmelerinin yükleme durumunu belirlemek için WMI kullanma

Sayfa güncel :
Sayfa oluşturma tarihi :

özet

Kullanmakta olduğunuz Windows'ta yüklü olan güncelleştirmeleri (KB cinsinden) denetlemek için WMI'yı kullanın.

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

Çalışma Ortamı

Operasyon kontrol ortamı

Windows Sürümü
  • Windows 7 Ultimate
  • Windows Vista İş
.NET Framework Sürümü
  • 3.5 SP1
  • 4

Gerekli sistem gereksinimleri

Windows Sürümü
  • Windows 98 veya üstü (ancak hepsi onaylanmadı)
.NET Framework Sürümü
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

madde

KB nedir?

インストールされている更新プログラム(KB)が表示されています。

KB, "kilobayt" veya "klavye" ifadesinin kısaltması olarak da kullanılır, bu nedenle genel halk için kullanılan bir kelime olduğunu sanmıyorum, ancak Windows güvenlik desteği ve hata düzeltmeleri gibi güncellemeler bazen kimliğin ilk iki harfinden sonra "KB" olarak adlandırılır.

Bu güncelleştirmelerin her birine bir kimlik atanır ve XXXXXX'in herhangi bir sayı olduğu "KBXXXXXXX" biçiminde belirtilir. Basamak sayısı sabit değildir). Ancak, tüm güncelleştirmelerin bu biçimi izlemediğini unutmayın.

Bu arada, bu "KB" nin orijinal adı "Microsoft Bilgi Bankası" dır ve Microsoft tarafından Web'de yayımlanan teknik makalenin kimliğiyle eşleşir. Örneğin, KB980218'e yönelik bir güncelleştirmeyse, ilgili teknik makale http://support.microsoft.com/?kbid=980218".

KB yükleme durumunu arayan programlar

Örnekler Visual Studio 2010 ve WPF'de açıklansa da, KB denetimi programları önceki Visual Studio, Windows Form ve konsol uygulamalarında da kullanılabilir. Bu makalede, KB yüklemesini denetlemek için Windows Yönetim Araçları'nı (WMI) kullanacağız.

Referans Ekleme

「参照設定」を右クリックして「参照の追加」を選択

WMI kullanmak için ManagementObjectSearcher ve ManagementObject sınıflarını kullanırsınız, ancak bu sınıfları kullanmak için System.Management .dll başvurmanız gerekir.

C# projeleri için, Çözüm Gezgini'nden Başvurular'a sağ tıklayın ve Başvuru Ekle'yi seçin.

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

Referans Ekle iletişim kutusu göründüğünde, ". NET sekmesinden System.Management öğesini seçin ve Tamam düğmesini tıklatın.

Çözüm Gezgini başvurusuna "System.Management" eklenirse Tamam.

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

Proje özelliklerini VB.NET, soldaki sekmeden "Gözat" ı tıklayın, sağdaki Ekle düğmesini tıklayın. Yukarıdaki gibi, Referans Ekle iletişim kutusu görüntülenir, bu nedenle "System.Management" ı seçin ve Tamam düğmesine tıklayın.

Önceki ekrana dönüp orta listeye "System.Management" eklerseniz, sorun değil.

Ayrıca, programınızdaki ad alanı açıklamalarını atlamak için aşağıdaki listeden "System.Management" öğesini işaretleyin.

Ayrıca, özgün ipuçlarıyla ilgili olmasa da, bu örnek StringBuilder sınıfını kullanır, bu nedenle "System.Text" ad alanını da kontrol ettim. (yalnızca VB.NET)

sahne

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

Bu örnekte kullanılan ekran, KB'nin yükleme durumunu denetlemek için bir yürütme düğmesi ve sonuçları görüntüleyen bir metin kutusu içeren basit bir ekrandır.

WPF'de yapıyorum, ancak aynı ekran Windows Form'da yapılandırılabilir.

program

C ManagementObjectSearcher #, sınıfların ve diğer ad alanlarının açıklamasını azaltmak için kodun başına ""using System.Management; ekler. VB.NET, ad alanının proje özelliklerine aktarılması gerektiğini belirttiniz, bu nedenle özel bir şey yazmanıza gerek yok, ancak bunu yapmadıysanız, ".Imports System.Management

* Hem C# hem de VB.NET, tüm sınıf adları ""System.Management.ManagementObjectSearcher gibi bir ad alanından yazılmışsa, yukarıdaki belirtim gerekli değildir.

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şağıda, yüklü KB'yi arayan ve listeleyen kod verilmiştir.

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()

İlk satırdaki ""ResultTextBox, elde edilen sonuçları görüntülemek için kullanılan bir metin kutusudur.

yönetilen nesnenin arama sınıfının bir örneğini oluştururnew ManagementObjectSearcher ve WMI sorgusunu bağımsız değişken olarak ayarlar. Bir sorgunun sözdizimi neredeyse bir SQL deyimine eşittir, bu nedenle ayrıntılar için SQL ile ilişkili olarak buna bakın. "Win32_QuickFixEngineering", geçerli işletim sistemi için geçerli olan bir güncelleştirmeyi temsil eder.

Daha önce " içinde belirtilen WMI sorgusunda bir arama gerçekleştirir ve sonuçları "query.Get() olarak döndürür.ManagementObjectCollection

"" güncelleme bilgilerini listelediğinden, foreach içinde "" alırız ve sonuç olarak "HotFixID"ManagementObjectCollectionManagementObject parametresinden benzersiz bir tanımlayıcı yazarız.

作成されたフォルダ

Bunu yaptığınızda, güncelleştirme kimlikleri şekilde gösterildiği gibi listelenir.

Çalıştırdığınızda görebileceğiniz gibi, sadece ilk çalıştırmada yavaştır. İkinci seferden sonra, oldukça erken.

System.Management.dll yüklenmesi ve işlenmesi yavaş mı yoksa WMI sorgusu yürütmenin mi yavaş olduğu belli değil, ancak yavaş olduğu gerçeği değişmiyor, bu yüzden kullanırken gecikme konusunda endişeleriniz varsa, zaman uyumsuz yürütme gibi önlemler almanın gerekli olduğunu düşünüyorum.