WMI:n avulla voit määrittää Windows-päivitysten asennuksen tilan
yhteenveto
WMI:n avulla voit tarkistaa päivitykset (KB:nä), jotka on asennettu tällä hetkellä käyttämääsi Windowsiin.
Toimintaympäristö
Käyttötarkastuksen ympäristö
Windows-versio |
|
.NET Framework -versio |
|
Järjestelmävaatimukset vaaditaan
Windows-versio |
|
.NET Framework -versio |
|
aine
Mikä on KB?
KB: tä käytetään myös lyhenteenä ilmaisulle "kilotavu" tai "näppäimistö", joten en usko, että se on sana, jota käytetään suurelle yleisölle, mutta päivityksiä, kuten Windowsin tietoturvatukea ja virheenkorjauksia, kutsutaan joskus nimellä "KB" tunnuksen kahden ensimmäisen kirjaimen jälkeen.
Jokaiselle näistä päivityksistä on määritetty tunnus ja määritetty muodossa "KBXXXXXXX", jossa XXXXXX on mikä tahansa numero. Numeroiden lukumäärää ei ole vahvistettu). Huomaa kuitenkin, että kaikki päivitykset eivät noudata tätä muotoa.
Muuten, tämän "KB": n alkuperäinen nimi on "Microsoft Knowledge Base" ja vastaa Microsoftin verkossa julkaiseman teknisen artikkelin tunnusta. http://support.microsoft.com/?kbid=980218".
Ohjelmat, jotka etsivät KB-asennuksen tilaa
Vaikka näytteet on kuvattu Visual Studio 2010:ssä ja WPF:ssä, KB-tarkistusohjelmia voidaan käyttää myös aiemmissa Visual Studio-, Windows Form- ja konsolisovelluksissa. Tässä artikkelissa käytämme Windowsin hallintainstrumentaatiota (WMI) KB-asennuksen tarkistamiseen.
- Windowsin hallintainstrumentointi (Wikipediasta)
Viitteiden lisääminen
Jos haluat käyttää WMI:tä, käytät ManagementObjectSearcher- ja ManagementObject-luokkia, mutta sinun on viitattava system.management-.dll, jotta voit käyttää näitä luokkia.
Jos kyseessä on C#-projekti, napsauta hiiren kakkospainikkeella Viittaukset Solution Explorerista ja valitse Lisää viitteitä.
Kun Lisää viite -valintaikkuna tulee näkyviin, napsauta ". Valitse NET-välilehdeltä System.Management ja napsauta OK painiketta.
OK, jos "System.Management" on lisätty Solution Explorer -viitteeseen.
Jos VB.NET avata projektin ominaisuuksia, napsauta "Selaa" vasemmalla olevasta välilehdestä, napsauta oikealla olevaa Lisää-painiketta. Kuten yllä, Lisää viite -valintaikkuna tulee näkyviin, joten valitse "System.Management" ja napsauta OK painiketta.
Jos palaat edelliseen näyttöön ja lisäät "System.Management" keskimmäiseen luetteloon, se on OK.
Tarkista myös "System.Management" alla olevasta luettelosta jättääksesi nimiavaruuden kuvaukset pois ohjelmastasi.
Lisäksi, vaikka se ei liity alkuperäisiin vinkkeihin, tämä näyte käyttää StringBuilder-luokkaa, joten tarkistin myös "System.Text" -nimiavaruuden. (Vain VB.NET)
kohtaus
Tässä esimerkissä käytetty näyttö on yksinkertainen näyttö, jossa on suorituspainike KB: n asennuksen tilan tarkistamiseksi ja tekstiruutu, joka näyttää tulokset.
Teen sen WPF: ssä, mutta sama näyttö on määritettävissä Windows Formissa.
ohjelma
C ManagementObjectSearcher
# lisää ""using System.Management;
koodin alkuun vähentääkseen luokkien ja muiden nimiavaruuksien kuvausta. VB.NET määritit, että nimiavaruus tulisi tuoda projektin ominaisuuksiin, joten sinun ei tarvitse kirjoittaa mitään erityistä, mutta jos et ole tehnyt niin, sinun on lisättävä ".Imports System.Management
* Sekä C#: ssa että VB.NET, jos kaikki luokkien nimet on kirjoitettu nimiavaruudesta, kuten "System.Management.ManagementObjectSearcher
", yllä oleva määritys ei ole tarpeen.
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」追加)
Alla on koodi, joka etsii ja luettelee asennetun KB: n.
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()
Ensimmäisellä rivillä oleva ""ResultTextBox
on tekstiruutu saatujen tulosten näyttämiseksi.
luonew ManagementObjectSearcher
esiintymän hallitun objektin hakuluokasta ja määrittää WMI-kyselyn argumentiksi. Kyselyn syntaksi on lähes yhtä suuri kuin SQL-lause, joten katso lisätietoja sql: n suhteen. "Win32_QuickFixEngineering" tarkoittaa päivitystä, joka koskee nykyistä käyttöjärjestelmää.
Suorittaa haun WMI-kyselystä, joka on määritetty aiemmin kohdassa "query.Get()
ja palauttaa tulokset muodossa ".ManagementObjectCollection
Koska "" luettelee päivitystiedot, saamme "" etukäteen ja kirjoitamme yksilöllisen tunnisteen "HotFixID"ManagementObjectCollection
ManagementObject
-parametrista.
Kun teet tämän, päivitystunnukset näkyvät kuvassa esitetyllä tavalla.
Kuten näet, kun suoritat sen, se on hidas vain ensimmäisellä ajokerralla. Toisen kerran jälkeen se on kohtuullisen aikaista.
Ei ole selvää, onko System.Management.dll on hidas ladata ja käsitellä tai WMI-kyselyn suorittaminen hidasta, mutta se, että se on hidas, ei muutu, joten jos olet huolissasi viiveestä sitä käytettäessä, mielestäni on tarpeen ryhtyä toimenpiteisiin, kuten asynkroniseen suoritukseen.