共用方式為


使用強式型別物件

另一個能讓應用程式開發人員方便管理副稽核的功能便是強式型別物件支援。為符合消費者的擴充性需求,WMI 物件通常都是晚期繫結,不會強制強式型別。在 .NET Framework 環境中,WMI 可自動產生 WMI 物件的早期繫結包裝函式。這樣一來應用程式可在程式碼中使用這些包裝函式,並且利用所有可用的 Microsoft Visual Studio 協助功能,供強式型別物件使用。下列任何一種方式都可以產生強式型別包裝函式:

  • 在 .NET Framework SDK 中使用 MgmtClassGen.exe 公用程式。

    如需詳細資訊,請參閱管理強型別類別產生器 (mgmtclassgen.exe)

  • 使用 Visual Studio .NET 中的伺服器總管擴充功能,前者可在當您將管理物件拖曳到設計工具時,自動產生包裝函式。

  • 使用 System.Management.ManagementClass.GetStronglyTypedClassCode() 方法撰寫程式。

包裝函式將實作為 Managed 程式碼類別,並且可提供多語言支援,因此您可以在任何程式語言中使用包裝函式。

下列範例是根據使用 System.Management 存取管理資訊主題中的範例而來,但目前該範例中含有強式型別 Service 類別。執行這個範例之前,您必須先產生這個類別:

C:> managementclassgen Win32_Service /L cs    

(或對 Visual Basic 專案使用 /L vb)

產生器會輸出 service.cs 程式碼檔,您應該將它和下面的程式碼加入到專案中。

請留意 foreach 陳述式 (而非泛用 ManagementObject 類別) 中強式型別「Service」類別的使用,以及對傳回物件屬性的簡式標準 Dot 註解存取:

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 存取管理資訊 | 擷取管理物件集合 | 查詢管理資訊 | 訂閱和使用事件 | 執行管理物件上的方法 | 遠端和連接選項