次の方法で共有


厳密に型指定されたオブジェクトの使用

アプリケーション開発者が簡単に管理実装を行うためのもう 1 つの機能として、厳密に型指定されたオブジェクトがサポートされています。拡張性に対する顧客のニーズを満たすには、通常、WMI オブジェクトは遅延バインディングとし、厳密な型指定を必要としません。.NET Framework 環境では、WMI は WMI オブジェクトを事前バインディングするラッパーを自動的に生成する機能を提供します。この機能によって、アプリケーションはコードでこれらのラッパーを使用でき、Microsoft Visual Studio で厳密に型指定されたオブジェクトのサポートに提供されている機能 (Intellisense やオブジェクト参照など) をすべて利用できます。厳密に型指定されたラッパーは、次のいずれかの方法で生成できます。

  • .NET Framework SDK の MgmtClassGen.exe ユーティリティを使用します。

    詳細については、「厳密型クラス ジェネレータ (Mgmtclassgen.exe)」を参照してください。

  • Visual Studio .NET のサーバー エクスプローラ管理拡張機能を使用します。この機能は、管理クラスをデザイナにドラッグすると自動的にラッパーを生成します。

  • プログラムで、System.Management.ManagementClass.GetStronglyTypedClassCode() メソッドを使用します。

ラッパーはマネージ コード クラスとして実装されるため、複数言語のサポートを提供し、すべてのプログラミング言語で使用できます。

次の例は「System.Management による管理情報へのアクセス」で示した例を基にして、厳密に型指定された Service クラスを含んでいます。この例を実行するには、このクラスを生成する必要があります。

C:> managementclassgen Win32_Service /L cs    

(Visual Basic プロジェクトの場合は /L を使用します)

ジェネレータから出力された service.cs コード ファイルを、次に示すコードと共にプロジェクトに追加する必要があります。

foreach ステートメントで、通常使用される ManagementObject クラスの代わりに厳密に型指定された "Service" クラスが使用され、また、返されるオブジェクトのプロパティへの単純化された標準ドット表記によるアクセスが使用されています。

using System;
using ROOT.CIMV2.Win32;
// Contains the strongly-typed generated class "Service" 
// in ROOT.CIMV2.Win32 namespace
      
class Sample {
   // Enumerate instances of Win32_Service class
   void EnumerateServices() {
      Console.WriteLine("List services and their state");
      foreach(Service ser in Service.GetInstances())
         Console.WriteLine(
      "Service: "+ ser.Name + " is " + ser.State);   
   }
      
   public static void Main(string[] args) {
      Sample test = new Sample();
      test.EnumerateServices();
      return;
   }
}


[Visual Basic]
Imports System
Imports Microsoft.CIMv2.Win32

Public Function EnumerateServices
Console.WriteLine("List services and their state");

'Request the collection of services
Dim searcher As New ManagementObjectSearcher("Win32_Service")

' Enumerate through the collection
Dim serv As Service
For Each serv In searcher.Get()
   Console.WriteLine("Variable : {0}, Value = {1}", _
      serv.Name, serv.VariableValue)
Next serv
End Function 

参照

System.Management による管理情報へのアクセス | 管理オブジェクトのコレクションの取得 | 管理情報のクエリ | 管理イベントへのサブスクライブと管理イベントの処理 | 管理オブジェクトのメソッドの実行 | リモート管理と接続オプション