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 |
DateTime 或 TimeSpan |
CIM_REFERENCE |
ManagementPath |
CIM_CHAR16 |
Char |
CIM_OBJECT |
ManagementBaseObject |
CIM_IUNKNOWN |
物件 |
CIM_ARRAY |
上述物件的陣列 |
請注意下列在產生 WMI 類別時的行為:
標準公用屬性或方法有可能和現有屬性或方法的名稱相同。 當此情況發生時,工具會變更在產生的類別中之屬性或方法名稱以避免命名衝突。
在產生的類別中之屬性或方法名稱有可能是目標程式語言的關鍵字。 當此情況發生時,工具會變更在產生的類別中之屬性或方法名稱以避免命名衝突。
在 WMI 中,限定詞就是包含在說明類別、執行個體、屬性或方法之資訊的修飾詞。 WMI 使用如 Read、Write 和 Key 等標準限定詞以說明產生的類別中之屬性。 例如,以 Read 限定詞修飾的屬性只能以在產生的類別中之屬性 get 存取子來定義。 因為以 Read 限定詞標記的屬性是做唯讀之用,不會定義 set 存取子。
數值屬性可使用 Values 和 ValueMaps 限定詞加以修飾,表示屬性只能設定為指定的允許值。 列舉型別是以這些 Values 和 ValueMaps 產生的,而屬性會對應到列舉型別。
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);
}
}
請參閱
參考
ManagementClass.GetStronglyTypedClassCode
System.CodeDom.Compiler.CodeDomProvider
Visual Studio 和 Windows SDK 命令提示字元
其他資源
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2011 年 4 月 |
加入使用 Visual Studio 和 Windows SDK 命令提示字元的相關資訊。 |
資訊加強。 |