WMI izmantošana, lai noteiktu Windows atjauninājumu instalēšanas statusu

Lapa atjaunota :
Lapas izveides datums :

Kopsavilkuma

Izmantojiet WMI, lai pārbaudītu, vai nav atjauninājumu (KB formātā), kas ir instalēti pašlaik izmantotajā sistēmā Windows.

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

Darbības vide

Darbības pārbaudes vide

Windows versija
  • Windows 7 Ultimate
  • Windows Vista Business
.NET Framework versija
  • 3,5 SP1
  • 4

Nepieciešamās sistēmas prasības

Windows versija
  • Windows 98 vai jaunāka versija (bet ne visi ir apstiprināti)
.NET Framework versija
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

viela

Kas ir KB?

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

KB tiek izmantots arī kā saīsinājums izteicienam "kilobaits" vai "tastatūra", tāpēc es nedomāju, ka tas ir vārds, ko izmanto plašai sabiedrībai, bet atjauninājumi, piemēram, Windows drošības atbalsts un kļūdu labojumi, dažreiz tiek saukti par "KB" pēc pirmajiem diviem ID burtiem.

Katram no šiem atjauninājumiem tiek piešķirts ID un norādīts formātā "KBXXXXXXXX", kur XXXXXX ir jebkurš numurs. Ciparu skaits nav fiksēts). Tomēr ņemiet vērā, ka ne visi atjauninājumi atbilst šim formātam.

Starp citu, šī "KB" sākotnējais nosaukums ir "Microsoft zināšanu bāze" un atbilst Microsoft tīmeklī publicētā tehniskā raksta ID. Piemēram, ja tas ir ATJAUNINĀJUMS UZ KB980218, atbilstošais tehniskais raksts ir http://support.microsoft.com/?kbid=980218".

Programmas, kas meklē KB instalācijas statusu

Lai gan paraugi ir aprakstīti programmā Visual Studio 2010 un WPF, KB pārbaudes programmas var izmantot arī iepriekšējās Visual Studio, Windows formā un konsoles programmās. Šajā rakstā mēs izmantosim Windows pārvaldības instrumentāciju (Windows Management Instrumentation — WMI), lai pārbaudītu KB instalēšanu.

Atsauču pievienošana

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

Lai izmantotu WMI, izmantojiet klases ManagementObjectSearcher un ManagementObject, bet, lai izmantotu šīs klases, ir jāatsaucas uz System.Management .dll.

C# projektiem ar peles labo pogu noklikšķiniet uz Atsauces no risinājumu pārlūka un izvēlieties Pievienot atsauces.

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

Kad tiek parādīts dialoglodziņš Atsauces pievienošana, noklikšķiniet uz ". Cilnē NET atlasiet System.Management un noklikšķiniet uz pogas Labi.

Labi, ja risinājumu pārlūka atsaucei ir pievienots "System.Management".

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

Ja VB.NET atvērtu projekta rekvizītus, kreisajā pusē esošajā cilnē noklikšķiniet uz "Pārlūkot", labajā pusē noklikšķiniet uz pogas Pievienot. Kā norādīts iepriekš, tiek parādīts dialoglodziņš Pievienot atsauci, tāpēc atlasiet "System.Management" un noklikšķiniet uz pogas Labi.

Ja atgriežaties iepriekšējā ekrānā un vidējam sarakstam pievienojat "System.Management", tas ir labi.

Pārbaudiet arī "System.Management" no zemāk esošā saraksta, lai savā programmā izlaistu nosaukumvietas aprakstus.

Turklāt, lai gan tas nav saistīts ar oriģinālajiem padomiem, šajā paraugā tiek izmantota StringBuilder klase, tāpēc es pārbaudīju arī nosaukumvietu "System.Text". (tikai VB.NET)

Ainas

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

Šajā paraugā izmantotais ekrāns ir vienkāršs ekrāns ar izpildes pogu, lai pārbaudītu KB instalācijas statusu, un tekstlodziņš, kas parāda rezultātus.

Es to veidoju WPF, bet tas pats ekrāns ir konfigurējams Windows formā.

programma

C ManagementObjectSearcher # koda sākumā pievieno ""using System.Management;, lai samazinātu klašu un citu nosaukumvietu aprakstu. Sadaļā VB.NET norādījāt, ka nosaukumvieta ir jāimportē projekta rekvizītos, tāpēc jums nav jāraksta nekas īpašs, bet, ja neesat to izdarījis, jums jāpievieno ".Imports System.Management

* Gan C#, gan VB.NET, ja visi klašu nosaukumi ir rakstīti no nosaukumvietas, piemēram, "System.Management.ManagementObjectSearcher", iepriekš minētā specifikācija nav nepieciešama.

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」追加)

Zemāk ir kods, kas meklē un uzskaita instalēto KB.

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

""ResultTextBox pirmajā rindā ir tekstlodziņš iegūto rezultātu parādīšanai.

izveidonew ManagementObjectSearcher pārvaldītā objekta meklēšanas klases instanci un iestata WMI vaicājumu kā argumentu. Vaicājuma sintakse ir gandrīz vienāda ar SQL priekšrakstu, tāpēc detalizētu informāciju skatiet to saistībā ar SQL. "Win32_QuickFixEngineering" ir atjauninājums, kas attiecas uz pašreizējo operētājsistēmu.

Veic meklēšanu WMI vaicājumā, kas norādīts iepriekš sadaļā "query.Get(), un atgriež rezultātus kā ".ManagementObjectCollection

Tā kā "" uzskaita atjaunināšanas informāciju, mēs foreach iegūstam "" un rezultātā no parametra "HotFixID"ManagementObjectCollectionManagementObject rakstām unikālu identifikatoru.

作成されたフォルダ

To darot, atjaunināšanas ID tiek uzskaitīti, kā parādīts attēlā.

Kā redzat, kad to skrienat, tas ir lēns tikai pirmajā piegājienā. Pēc otrās reizes tas ir samērā agri.

Nav skaidrs, vai System.Management.dll ir lēns, lai ielādētu un apstrādātu, vai arī WMI vaicājumu izpilde ir lēna, bet fakts, ka tas ir lēns, nemainās, tāpēc, ja jūs uztraucaties par latentumu, lietojot to, es domāju, ka ir nepieciešams veikt tādus pasākumus kā asinhronā izpilde.