Share via


Mgmtclassgen.exe(管理强类型类生成器)

更新:2011 年 4 月

管理强类型类生成器工具使您可为指定的 Windows Management Instrumentation (WMI) 类快速生成早期绑定的托管类。 生成的类简化了为访问 WMI 类的实例所必须编写的代码。

安装 Visual Studio 和 Windows SDK 时会自动安装此工具。 要运行工具,我们建议您使用 Visual Studio 命令提示符或 Windows SDK 命令提示符(也称 CMD Shell)。 您可以使用这些实用程序轻松运行工具,而不需要导航到安装文件夹。 有关更多信息,请参见 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

为其生成早期绑定的托管类的 Windows Management Instrumentation 类。

选项

说明

/l language(语言)

指定用于生成早期绑定的托管类的语言。 可以将 CS(C#;默认值)、VB (Visual Basic)、MC(C++ 托管扩展),或 JS JS (JScript) 指定为语言参数。

/m machine(计算机)

指定要连接到的计算机,WMI 类驻留在该计算机中。 默认使用本地计算机。

/n path(路径)

指定到达包含 WMI 类的 WMI 命名空间的路径。 如果没有指定该选项,则该工具为默认 Root\cimv2 命名空间中的 WMIClass 生成代码。

/o classnamespace(类命名空间)

指定在其中生成托管代码类的 .NET 命名空间。 如果没有指定该选项,则该工具使用 WMI 命名空间和架构前缀生成命名空间。 架构前缀是类名中下划线字符前面的部分。 例如,对于 Root\cimv2 命名空间中的 Win32_OperatingSystem 类,该工具会在 ROOT.CIMV2.Win32 中生成类。

/p filepath(文件路径)

指定在其中保存生成代码的文件的路径。 如果没有指定该选项,则该工具在当前目录中创建文件。 它使用 WMIClass 参数为类和在其中生成类的文件命名。 类名和文件名与 WMIClass 名相同。若 WMIClass 包含下划线字符,则该工具使用类名中下划线字符后面的部分。 例如,若 WMIClass 名以 Win32_LogicalDisk 格式出现,则生成的类和文件名为“logicaldisk”。 若文件已存在,则该工具覆盖现有文件。

/pw password(密码)

指定登录到由 /m 选项指定的计算机时使用的密码。

/u 用户名

指定登录到由 /m 选项指定的计算机时使用的用户名。

/?

显示该工具的命令语法和选项。

备注

Mgmtclassgen.exe 使用 ManagementClass.GetStronglyTypedClassCode 方法。 因此,您可使用任何自定义的代码提供程序以 C#、Visual Basic 和 JScript 以外的托管语言生成代码。

注意,生成的代码绑定到为其生成代码的架构。 如果基础架构发生更改,并且您希望该类反映架构的更改,则必须重新生成该类。

下表显示 WMI 通用信息模型 (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

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 的服务器资源管理器管理扩展生成强类型的类。

有关 WMI 的更多信息,请参见 Platform SDK 文档中的 Windows Management Instrumentation 主题。

示例

以下命令为 Root\cimv2 命名空间中的 Win32_LogicalDisk WMI 类生成 C# 托管类。 该工具将 ROOT.CIMV2.Win32 命名空间中的托管类写到位于 c:\disk.cs 的源文件中。

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 工具

修订记录

Date

修订记录

原因

2011 年 4 月

添加了有关使用 Visual Studio 和 Windows SDK 命令提示符的信息。

信息补充。