WMI izmantošana, lai noteiktu Windows atjauninājumu instalēšanas statusu
Kopsavilkuma
Izmantojiet WMI, lai pārbaudītu, vai nav atjauninājumu (KB formātā), kas ir instalēti pašlaik izmantotajā sistēmā Windows.
Darbības vide
Darbības pārbaudes vide
Windows versija |
|
.NET Framework versija |
|
Nepieciešamās sistēmas prasības
Windows versija |
|
.NET Framework versija |
|
viela
Kas ir 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.
- Windows pārvaldības instrumenti (no Vikipēdijas)
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.
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".
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
Š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"ManagementObjectCollection
ManagementObject
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.