Използвайте WMI, за да определите състоянието на инсталиране на актуализации на Windows
резюме
Използвайте WMI, за да проверите за актуализации (в КБ), които са инсталирани на Windows, който използвате в момента.
Операционна среда
Среда за проверка на операция
Версия на Windows |
|
.NET Рамкова версия |
|
Изисквания към системата, необходими
Версия на Windows |
|
.NET Рамкова версия |
|
вещество
Какво представлява KB?
KB се използва и като съкращение за израза "килобайт" или "клавиатура", така че не мисля, че това е дума, използвана за широката общественост, но актуализации като поддръжка на защитата на Windows и корекции на грешки понякога се обозначават като "КБ" след първите две букви на идентификационния номер.
На всяка от тези актуализации е присвоен ИД и е зададен във формат "KBXXXXXXX", където XXXXXX е произволен номер. Броят на цифрите не е фиксиран). Имайте предвид обаче, че не всички актуализации следват този формат.
Между другото, първоначалното име на това "КБ" е "база знания на Microsoft" и съответства на ИД на техническата статия, публикувана от Microsoft в уеб. Например, ако това е актуализация на KB980218, съответната техническа статия е http://support.microsoft.com/?kbid=980218".
Програми, които търсят състояние на инсталиране на КБ
Въпреки че пробите са описани в Visual Studio 2010 и WPF, kb-checking програми могат да се използват и в по-рано Visual Studio, Windows Form и конзола приложения. В тази статия ще използваме Инструмента за управление на Windows (WMI), за да проверим инсталирането на КБ.
- Инструмент за управление на Windows (от Уикипедия)
Добавяне на препратки
За да използвате WMI, използвате класовете ManagementObjectSearcher и ManagementObject, но трябва да се обърнете към System.Management .dll, за да използвате тези класове.
За c# проекти щракнете с десния бутон препратки от Solution Explorer и изберете Добавяне на препратки.
Когато се появи диалоговият прозорец Добавяне на препратка, кликнете върху ". От раздела NET изберете System.Management и кликнете върху OK бутон.
OK, ако "System.Management" се добавя към препратката към Solution Explorer.
Ако VB.NET отворите свойствата на проекта, щракнете върху "Преглед" от раздела вляво, щракнете върху бутона Добавяне вдясно. Както по-горе, се показва диалоговият прозорец Добавяне на препратка, така че изберете "System.Management" и кликнете върху OK бутон.
Ако се върнете към предишния екран и добавите "System.Management" към средния списък, той е OK.
Също така проверете "System.Management" от списъка по-долу, за да пропускате описания на пространството на имената във вашата програма.
Също така, въпреки че не е свързана с оригиналните съвети, тази проба използва класа StringBuilder, така че проверих и пространството на имената "System.Text". (само за VB.NET)
място
Екранът, използван в тази проба, е прост екран с бутон за изпълнение, за да проверите състоянието на инсталацията на КБ и текстово поле, което показва резултатите.
Правя го в WPF, но същият екран е конфигурируем в Windows Form.
програма
C ManagementObjectSearcher
# добавя ""using System.Management;
към началото на кода, за да се намали описанието на класове и други пространства с имена. В VB.NET сте задали, че пространството на имената трябва да се импортира в свойствата на проекта, така че не е необходимо да пишете нищо специално, но ако не сте го направили, трябва да добавите ".Imports System.Management
* И в C# и VB.NET, ако всички имена на класове са написани от пространство на имената като "System.Management.ManagementObjectSearcher
", горната спецификация не е необходима.
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」追加)
По-долу е кодът, който търси и изброява инсталираната 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
в първия ред е текстово поле за показване на получените резултати.
създаваnew ManagementObjectSearcher
екземпляр на класа за търсене на управлявания обект и задава WMI заявката като аргумент. Синтаксисът на заявка е почти равен на SQL команда, така че погледнете го във връзка с SQL за подробности. "Win32_QuickFixEngineering" представлява актуализация, която се отнася за текущата операционна система.
Извършва търсене на WMI заявката, зададена по-рано в "query.Get()
и връща резултатите като ".ManagementObjectCollection
Тъй като "" изброява информацията за актуализацията, ние получаваме "" в преден и напишете уникален идентификатор от параметъра "HotFixID"ManagementObjectCollection
ManagementObject
в резултат на това.
Когато направите това, идентификаторите на актуализацията са изброени, както е показано на фигурата.
Както можете да видите, когато го стартирате, той е бавен само при първото бягане. След втория път е разумно рано.
Не е ясно дали System.Management.dll е бавно да се зареди и обработи или WMI заявка изпълнение е бавно, но фактът, че е бавен не се променя, така че ако се притеснявате за латентност, когато го използвате, мисля, че е необходимо да се вземат мерки като асинхронно изпълнение.