Share via


Mgmtclassgen.exe (管理強型別類別產生器)

更新:2011 年 4 月

[管理強型別類別產生器] 工具可快速地為指定的 Windows Management Instrumentation (WMI) 類別產生早期繫結 Managed 類別。 產生的類別會將為存取 WMI 類別之執行個體所撰寫的程式碼加以簡化。

這個工具會自動隨 Visual Studio 和 Windows SDK 一起安裝。 若要執行工具,建議您使用 Visual Studio 命令提示字元或 Windows SDK 命令提示字元。 這些公司可讓您輕鬆地執行工具,而不需瀏覽至安裝資料夾。 如需詳細資訊,請參閱Visual Studio 和 Windows SDK 命令提示字元

  • 如果您已經在電腦上安裝 Visual Studio:在工作列上,依序按一下 Start、All Programs、Visual Studio、Visual Studio Tools,然後按一下 Visual Studio Command Prompt。

    -或-

    如果您已經在電腦上安裝 Windows SDK:在工作列上,依序按一下 Start、All Programs、Windows SDK 的資料夾,然後按一下Command Prompt(或 CMD Shell)。

  • 在命令提示字元中輸入下列文字:

mgmtclassgen WMIClass [options] 

引數

描述

WMIClass

要產生早期繫結 Managed 類別的Windows Management Instrumentation 類別。

選項

描述

/l language

指定要用來產生早期繫結 Managed 類別的語言。 您可以指定 CS (C#;預設值)、VB (Visual Basic)、MC (Managed Extensions for C++) 或 JS (JScript) 做為語言引數。

/m machine

指定要連接的電腦,WMI 類別位在其中。 預設為本機電腦。

/n path

指定包含WMI 類別之 WMI 命名空間的路徑。 如果沒有指定這個選項,則根據預設工具會產生 Root\cimv2 命名空間之 WMIClass 的程式碼。

/o classnamespace

指定要產生 Managed 程式碼類別的.NET 命名空間。 如果沒有指定這個選項,則工具會產生使用 WMI 命名空間和結構描述前置字串的命名空間。 結構描述前置字串是位在底線字元前之類別名稱的一部分。 例如,針對 Root\cimv2 命名空間中的 Win32_OperatingSystem 類別,工具會產生 ROOT.CIMV2.Win32 中的類別。

/p filepath

指定將產生的程式碼儲存起來之檔案路徑。 如果沒有指定這個選項,則工具會將檔案建立在目前的目錄下。 工具會使用 WMIClass 引數來為產生類別的類別和檔案命名。 類別和檔案的名稱和 WMIClass. 的名稱一樣。如果 WMIClass 包含有一個底線字元,則工具會使用在底線字元之後的類別名稱其一部分。 例如,如果 WMIClass 名稱的格式為 Win32_LogicalDisk,則產生的類別和檔案將會命名為 "logicaldisk"。 如果已有檔案存在,工具會覆寫這個檔案。

/pw password

指定登入 /m 選項所指定之電腦時要採用的密碼。

/u user name

指定登入 /m 選項所指定之電腦時要採用的使用者名稱。

/?

顯示工具的命令語法和選項。

備註

Mgmtclassgen.exe 使用 ManagementClass.GetStronglyTypedClassCode 方法。 因此,可以使用任何自訂程式碼提供者來產生以 Managed 語言而不是以 C#、Visual Basic 和 JScript 碼。

請注意產生的類別會繫結至為其所產生的結構描述。 當基礎結構描述改變時,若要反映這些改變就必須重新產生類別。

下表顯示 WMI Common Information Model (CIM) 類型如何對應至產生的類別中之資料型別:

CIM 類型

產生的類別中之資料型別

CIM_SINT8

SByte

CIM_UINT8

Byte

CIM_SINT16

Int16

CIM_UINT16

UInt16

CIM_SINT32

Int32

SIM_UINT32

UInt32

CIM_SINT64

Int64

CIM_UINT64

UInt64

CIM_REAL32

Single

CIM_REAL64

Double

CIM_BOOLEAN

Boolean

CIM_String

字串

CIM_DATETIME

DateTimeTimeSpan

CIM_REFERENCE

ManagementPath

CIM_CHAR16

Char

CIM_OBJECT

ManagementBaseObject

CIM_IUNKNOWN

物件

CIM_ARRAY

上述物件的陣列

請注意下列在產生 WMI 類別時的行為:

  • 標準公用屬性或方法有可能和現有屬性或方法的名稱相同。 當此情況發生時,工具會變更在產生的類別中之屬性或方法名稱以避免命名衝突。

  • 在產生的類別中之屬性或方法名稱有可能是目標程式語言的關鍵字。 當此情況發生時,工具會變更在產生的類別中之屬性或方法名稱以避免命名衝突。

  • 在 WMI 中,限定詞就是包含在說明類別、執行個體、屬性或方法之資訊的修飾詞。 WMI 使用如 ReadWriteKey 等標準限定詞以說明產生的類別中之屬性。 例如,以 Read 限定詞修飾的屬性只能以在產生的類別中之屬性 get 存取子來定義。 因為以 Read 限定詞標記的屬性是做唯讀之用,不會定義 set 存取子。

  • 數值屬性可使用 ValuesValueMaps 限定詞加以修飾,表示屬性只能設定為指定的允許值。 列舉型別是以這些 ValuesValueMaps 產生的,而屬性會對應到列舉型別。

  • WMI 使用單一詞彙說明只能有一個執行個體的類別。 因此,單一 (Singleton) 類別的預設建構函式會將類別初始化為類別的唯一執行個體。

  • WMI 類別可以有本身是物件的屬性。 當產生此 WMI 類別型別的強型別類別時,應考慮產生此內嵌物件屬性型別的強型別類別。 這能讓您以強型別的方式存取內嵌物件。 請注意,產生的程式碼可能無法偵測到內嵌物件的型別。 在這個情況中,在產生的程式碼中會建立註解以告知您這個問題。 接著,可以修飾產生的程式碼以將屬性輸入至其他產生的類別。

  • WMI 中,CIM_DATETIME 資料型別的資料值可表示特定的日期和時間,或表示時間間隔。 如果資料值代表日期和時間,產生的類別中之資料型別就會是 DateTime。 如果資料值代表時間間隔,產生的類別中之資料型別就會是 TimeSpan

您也可以使用 Visual Studio .NET 中的 Server Explorer Management Extension 來產生強型別類別。

如需 WMI 的詳細資訊,請參閱 Platform SDK 說明文件中的<Windows Management Instrumentation>主題。

範例

下列命令產生 Root\cimv2 命名空間中 Win32_LogicalDisk WMI 類別之以C# 撰寫其程式碼的 Managed 類別。 工具會將 Managed 類別寫入 c:\disk.cs 的原始程式檔,放在 ROOT.CIMV2.Win32 命名空間中。

mgmtclassgen Win32_LogicalDisk /n root\cimv2 /l CS /p c:\disk.cs

下列程式碼範例顯示如何以程式設計方式使用產生的類別。 首先,列舉類別的執行個體和列印出路徑。 接下來,要初始化之所產生類別的執行個體,會以 WMI 的執行個體來建立。 Process 是為 Win32_Process 產生的類別,LogicalDisk 則是為 Root\cimv2 命名空間中 Win32_LogicalDisk 產生的類別。

Imports System
Imports System.Management
Imports ROOT.CIMV2.Win32

Public Class App   
   Public Shared Sub Main()      
      ' Enumerate instances of the Win32_process.
      ' Print the Name property of the instance.
      Dim ps As Process   
      For Each ps In  Process.GetInstances()
         Console.WriteLine(ps.Name)
      Next ps
      
      ' Initialize the instance of LogicalDisk with
      ' the WMI instance pointing to logical drive d:.
      Dim dskD As New LogicalDisk(New _
         ManagementPath("win32_LogicalDisk.DeviceId=""d:"""))
      Console.WriteLine(dskD.Caption)
   End Sub
End Class
using System;
using System.Management;
using ROOT.CIMV2.Win32;

public class App
{
   public static void Main()
   {
      // Enumerate instances of the Win32_process.
      // Print the Name property of the instance.
      foreach(Process ps in Process.GetInstances())
      {
         Console.WriteLine(ps.Name);
      }

      // Initialize the instance of LogicalDisk with
      // the WMI instance pointing to logical drive d:.
      LogicalDisk dskD = new LogicalDisk(new ManagementPath(
        "win32_LogicalDisk.DeviceId=\"d:\""));
      Console.WriteLine(dskD.Caption);
   }
}

請參閱

參考

System.Management

ManagementClass.GetStronglyTypedClassCode

System.CodeDom.Compiler.CodeDomProvider

Visual Studio 和 Windows SDK 命令提示字元

其他資源

.NET Framework 工具

變更記錄

日期

記錄

原因

2011 年 4 月

加入使用 Visual Studio 和 Windows SDK 命令提示字元的相關資訊。

資訊加強。