WMI를 사용하여 Windows 업데이트의 설치 상태 확인

페이지 업데이트 :
페이지 생성 날짜 :

요약

WMI를 사용하여 현재 사용 중인 Windows에 설치된 업데이트(KB)를 확인합니다.

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

운영 환경

작업 확인 환경

윈도우 버전
  • 윈도우 7 궁극
  • 윈도우 비스타 사업
.NET 프레임워크 버전
  • 3.5 SP1
  • 4

필요한 시스템 요구 사항

윈도우 버전
  • Windows 98 이상 (그러나 모두 확인되지는 않음)
.NET 프레임워크 버전
  • 1.0
  • 1.1
  • 2.0
  • 3.0
  • 3.5
  • 4.0

물질

KB란 무엇입니까?

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

KB는 "킬로바이트"또는 "키보드"라는 표현의 약어로도 사용되므로 일반 대중에게 사용되는 단어는 아니지만 Windows 보안 지원 및 버그 수정과 같은 업데이트는 ID의 처음 두 글자 뒤에 "KB"라고하는 경우가 있습니다.

이러한 각 업데이트에는 ID가 할당되고 XXXXXX가 임의의 숫자인 "KBXXXXXXX" 형식으로 지정됩니다. 자릿수는 고정되어 있지 않습니다). 그러나 모든 업데이트가 이 형식을 따르는 것은 아닙니다.

그런데이 "KB"의 원래 이름은 "Microsoft 기술 자료"이며 Microsoft가 웹에 게시 한 기술 문서의 ID와 일치합니다. 예를 들어 KB980218에 대한 업데이트 인 경우 해당 기술 문서는 다음과 같습니다. http://support.microsoft.com/?kbid=980218".

KB 설치 상태를 검색하는 프로그램

샘플은 Visual Studio 2010 및 WPF에 설명되어 있지만 KB 검사 프로그램은 이전 Visual Studio, Windows Form 및 콘솔 앱에서도 사용할 수 있습니다. 이 문서에서는 WMI(Windows 관리 계측)를 사용하여 KB 설치를 확인합니다.

참조 추가

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

WMI를 사용하려면 ManagementObjectSearcher 및 ManagementObject 클래스를 사용하지만 이러한 클래스를 사용하려면 System.Management .dll를 참조해야 합니다.

C# 프로젝트의 경우 솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택합니다.

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

참조 추가 대화 상자가 나타나면 "를 클릭합니다. NET 탭에서 System.Management를 선택하고 확인 단추를 클릭합니다.

"System.Management"가 솔루션 탐색기 참조에 추가되면 정상입니다.

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

프로젝트 속성을 열 VB.NET 경우 왼쪽 탭에서 "찾아보기"를 클릭하고 오른쪽의 추가 버튼을 클릭하십시오. 위와 같이 참조 추가 대화 상자가 표시되므로 "System.Management"를 선택하고 확인 버튼을 클릭하십시오.

이전 화면으로 돌아가서 중간 목록에 "System.Management"를 추가하면 정상입니다.

또한 아래 목록에서 "System.Management"를 확인하여 프로그램에서 네임 스페이스 설명을 생략하십시오.

또한 원래 팁과 관련이 없지만이 샘플에서는 StringBuilder 클래스를 사용하므로 "System.Text"네임 스페이스도 확인했습니다. (VB.NET 만 해당)

장면

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

이 샘플에 사용된 화면은 KB의 설치 상태를 확인하는 실행 단추와 결과를 표시하는 텍스트 상자가 있는 간단한 화면입니다.

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"은 현재 운영 체제에 적용되는 업데이트를 나타냅니다.

"query.Get()의 앞부분에 지정된 WMI 쿼리에 대한 검색을 수행하고 결과를 "로 반환합니다.ManagementObjectCollection

""는 업데이트 정보를 나열하기 때문에 foreach에서 ""을 가져 와서 결과적으로 "HotFixIDManagementObjectCollectionManagementObject"매개 변수에서 고유 식별자를 씁니다.

作成されたフォルダ

이렇게 하면 그림과 같이 업데이트 ID가 나열됩니다.

실행할 때 볼 수 있듯이 첫 번째 실행에서만 느립니다. 두 번째 시간이 지나면 합리적으로 일찍입니다.

System.Management.dll가로드 및 처리 속도가 느리거나 WMI 쿼리 실행이 느린지는 분명하지 않지만 속도가 느리다는 사실은 변경되지 않으므로 사용할 때 대기 시간이 걱정된다면 비동기 실행과 같은 조치를 취할 필요가 있다고 생각합니다.