Mgmtclassgen.exe (генератор строго типизированных классов управления)Mgmtclassgen.exe (Management Strongly Typed Class Generator)

Генератор классов управления со строгим типом позволяет быстро создавать управляемые классы с ранней привязкой для указанного класса инструментария управления Windows (WMI).The Management Strongly Typed Class Generator tool enables you to quickly generate an early-bound managed class for a specified Windows Management Instrumentation (WMI) class. Создаваемый класс упрощает код, необходимый для доступа к экземпляру класса WMI.The generated class simplifies the code you must write to access an instance of the WMI class.

СинтаксисSyntax

mgmtclassgen   
WMIClass [options]   
АргументArgument ОписаниеDescription
WMIClassWMIClass Класс WMI, для которого создается управляемый класс с ранней привязкой.The Windows Management Instrumentation class for which to generate an early-bound managed class.
ПараметрOption ОписаниеDescription
/l язык/l language Задает язык, на котором создается управляемый класс с ранней привязкой.Specifies the language in which to generate the early-bound managed class. В качестве аргумента, задающего язык, можно указать CS (C#, используется по умолчанию), VB (Visual Basic), MC (C++) или VS (JScript).You can specify CS (C#; default), VB (Visual Basic), MC (C++), or JS (JScript) as the language argument.
/m компьютер/m machine Задает компьютер, к которому следует подключиться и на котором находится соответствующий класс WMI.Specifies the computer to connect to, where the WMI class resides. По умолчанию это локальный компьютер.The default is the local computer.
/n path/n path Задает путь к пространству имен WMI, в котором содержится класс WMI.Specifies the path to the WMI namespace that contains the WMI class. Если этот параметр не указан, программа создает код для WMIClass в пространстве имен по умолчанию Root\cimv2.If you do not specify this option, the tool generates code for WMIClass in the default Root\cimv2 namespace.
/o пространство_имен_класса/o classnamespace Задает пространство имен .NET, в котором создается класс управляемого кода.Specifies the .NET namespace in which to generate the managed code class. Если этот параметр не указан, программа создает пространство имен, используя пространство имен WMI и префикс схемы.If you do not specify this option, the tool generates the namespace using the WMI namespace and the schema prefix. Префикс схемы представляет собой часть имени класса перед знаком подчеркивания.The schema prefix is the part of the class name preceding the underscore character. Например, для класса Win32_OperatingSystem в пространстве имен Root\cimv2 программа создает класс в пространстве имен ROOT.CIMV2.Win32.For example, for the Win32_OperatingSystem class in the Root\cimv2 namespace, the tool would generate the class in ROOT.CIMV2.Win32.
/p путь_к_файлу/p filepath Задает путь к файлу, в который будет записан созданный код.Specifies the path to the file in which to save the generated code. Если этот параметр не задан, программа создаст файл в текущем каталоге.If you do not specify this option, the tool creates the file in the current directory. Имена класса и файла, в котором он будет храниться, присваиваются на основе аргумента WMIClass.It names the class and file in which it generates the class using the WMIClass argument. Имена класса и файла будут совпадать с именем WMIClass.The name of the class and the file are the same as the name of the WMIClass. Если WMIClass содержит знак подчеркивания, будет использована часть имени класса после этого знака.If WMIClass contains an underscore character, the tool uses the part of the class name following the underscore character. Например, если WMIClass имеет вид Win32_LogicalDisk, созданным классу и файлу будет присвоено имя "logicaldisk".For example, if the WMIClass name is in the format Win32_LogicalDisk, the generated class and file is named "logicaldisk". Если файл с таким именем уже существует, новый файл будет записан поверх старого.If a file already exists, the tool overwrites the existing file.
/pw пароль/pw password Задает пароль, используемый для подключения к компьютеру, заданному в параметре /m.Specifies the password to use when logging on to a computer specified by the /m option.
/u имя_пользователя/u user name Задает имя пользователя, используемое для подключения к компьютеру, заданному в параметре /m.Specifies the user name to use when logging on to a computer specified by the /m option.
/?/? Отображает синтаксис команд и параметров программы.Displays command syntax and options for the tool.

ПримечанияRemarks

Программа Mgmtclassgen.exe использует метод ManagementClass.GetStronglyTypedClassCode.Mgmtclassgen.exe uses the ManagementClass.GetStronglyTypedClassCode method. Поэтому для генерации кода на управляемом языке, отличном от C#, Visual Basic и JScript, можно использовать любой нестандартный поставщик кода.Therefore, you can use any custom code provider to generate code in managed languages other than C#, Visual Basic, and JScript.

Следует заметить, что создаваемые классы связаны со схемой, для которой они были созданы.Note that generated classes are bound to the schema for which they are generated. Если базовая схема изменяется, для отображения внесенных изменений в схеме класс следует создать повторно.If the underlying schema changes, you must regenerate the class if you want it to reflect changes to the schema.

В следующей таблице приводится соответствие типов модели CIM WMI и типов данных в создаваемых классах.The following table shows how WMI Common Information Model (CIM) types map to data types in a generated class:

Тип CIMCIM type Тип данных создаваемого классаData type in the generated class
CIM_SINT8CIM_SINT8 SByteSByte
CIM_UINT8CIM_UINT8 ByteByte
CIM_SINT16CIM_SINT16 Int16Int16
CIM_UINT16CIM_UINT16 UInt16UInt16
CIM_SINT32CIM_SINT32 Int32Int32
SIM_UINT32SIM_UINT32 UInt32UInt32
CIM_SINT64CIM_SINT64 Int64Int64
CIM_UINT64CIM_UINT64 UInt64UInt64
CIM_REAL32CIM_REAL32 SingleSingle
CIM_REAL64CIM_REAL64 DoubleDouble
CIM_BOOLEANCIM_BOOLEAN BooleanBoolean
CIM_StringCIM_String StringString
CIM_DATETIMECIM_DATETIME DateTime или TimeSpanDateTime or TimeSpan
CIM_REFERENCECIM_REFERENCE ManagementPathManagementPath
CIM_CHAR16CIM_CHAR16 CharChar
CIM_OBJECTCIM_OBJECT ManagementBaseObjectManagementBaseObject
CIM_IUNKNOWNCIM_IUNKNOWN ОбъектObject
CIM_ARRAYCIM_ARRAY Массив указанных выше объектовArray of the above mentioned objects

Отметим следующие особенности процесса создания классов WMI.Note the following behaviors when you generate a WMI class:

  • Стандартное открытое свойство или метод может иметь имя, совпадающее с именем существующего свойства или метода.It is possible for a standard public property or method to have the same name as an existing property or method. В этом случае программа изменит имя свойства или метода в создаваемом классе, чтобы избежать конфликта имен.If this occurs, the tool changes the name of the property or method in the generated class to avoid naming conflicts.

  • Свойство или метод создаваемого класса может иметь имя, совпадающее с зарезервированным ключевым словом используемого языка программирования.It is possible for the name of a property or method in a generated class to be a keyword in the target programming language. В этом случае программа изменит имя свойства или метода в создаваемом классе, чтобы избежать конфликта имен.If this occurs, the tool changes the name of the property or method in the generated class to avoid naming conflicts.

  • В WMI квалификаторами называются модификаторы, которые содержат информацию, описывающую класс, экземпляр, свойство или метод.In WMI, qualifiers are modifiers that contain information to describe a class, instance, property, or method. В WMI для описания свойств создаваемого класса используются стандартные квалификаторы, такие как Read, Write и Key.WMI uses standard qualifiers such as Read, Write, and Key to describe a property in a generated class. Например, свойство, измененное квалификатором Read, определяется только совместно со свойством метода доступа get в создаваемом классе.For example, a property that is modified with a Read qualifier is defined only with a property get accessor in the generated class. Так как свойство, помеченное квалификатором Read, предназначено только для чтения, метод доступа set не определяется.Because a property marked with the Read qualifier is intended to be read-only, a set accessor is not defined.

  • Числовое свойство можно изменить с помощью квалификаторов Values и ValueMaps, которые указывают, что свойство может принимать только указанные допустимые значения.A numeric property can be modified by the Values and ValueMaps qualifiers to indicate that the property can be set only to specified permissible values. Перечисление создается на основе квалификаторов Values и ValueMaps, а свойство сопоставляется с этим перечислением.An enumeration is generated with these Values and ValueMaps and the property is mapped to the enumeration.

  • Класс, который может иметь только один экземпляр, в WMI называется одноэлементным.The WMI uses the term singleton to describe a class that can have only one instance. Таким образом, конструктор одноэлементного класса по умолчанию инициализирует класс в единственном экземпляре.Therefore, the default constructor for a singleton class will initialize the class to the only instance of the class.

  • У класса WMI могут быть свойства, которые являются объектами.A WMI class can have properties that are objects. При создании класса со строгим типом для данного типа класса WMI следует по возможности создавать классы со строгими типами для типов свойств внедренных объектов.When you generate a strongly-typed class for this type of WMI class, you should consider generating strongly-typed classes for the types of the embedded object properties. Благодаря этому станет возможен доступ к внедренным объектам в режиме строгой типизации.This will allow you to access the embedded objects in a strongly-typed manner. Следует заметить, что создаваемый код не всегда может определить тип внедренного объекта.Note that the generated code might not be able to detect the type of the embedded object. В этом случае в созданном коде будет создан комментарий с уведомлением об этой ситуации.In this case, a comment will be created in the generated code to notify you of this issue. Обнаружив такое уведомление, можно изменить созданный код, приписав свойство другому созданному классу.You can then modify the generated code to type the property to the other generated class.

  • В WMI значение данных типа CIM_DATETIME может быть представлено как в виде определенной даты и времени, так и в виде временного интервала.In WMI, the data value of the CIM_DATETIME data type can represent either a specific date and time or a time interval. Если значение данных представляет собой время и дату, в созданном классе ему будет соответствовать тип данных DateTime.If the data value represents a date and time, the data type in the generated class is DateTime. Если значение данных представляет собой временной интервал, в созданном классе ему будет соответствовать тип данных TimeSpan.If the data value represents a time interval, the data type in the generated class is TimeSpan.

Управляемые классы со строгим типом можно создавать также с помощью Server Explorer Management Extension в Visual Studio .NET.You can alternately generate a strongly-typed class using the Server Explorer Management Extension in Visual Studio .NET.

Дополнительные сведения о WMI см. в разделе Инструментарий управления Windows в документации по продукту Platform SDK.For more information about WMI, see the Windows Management Instrumentation topic in the Platform SDK documentation.

ПримерыExamples

При выполнении следующей команды создается управляемый класс на языке C# для класса WMI Win32_LogicalDisk в пространстве имен Root\cimv2.The following command generates a managed class in C# code for the Win32_LogicalDisk WMI class in the Root\cimv2 namespace. Программа записывает управляемый класс в исходный файл, расположенный в "c:\disk.cs", в пространстве имен ROOT.CIMV2.Win32.The tool writes the managed class to the source file at c:\disk.cs in the ROOT.CIMV2.Win32 namespace.

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

В следующем примере кода показано, как использовать созданный класс в программе.The following code example shows how to use a generated class programmatically. Сначала экземпляр класса перечисляется, и к нему печатается путь.First, an instance of the class is enumerated and the path is printed. Затем создается экземпляр инициализируемого класса с экземпляром WMI.Next, an instance of the generated class to be initialized is created with an instance of WMI. Process — это класс, созданный для Win32_Process, а LogicalDisk — это класс, созданный для Win32_LogicalDisk в пространстве имен Root\cimv2.Process is the class generated for Win32_Process and LogicalDisk is the class generated for Win32_LogicalDisk in the Root\cimv2 namespace.

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);  
   }  
}  

См. такжеSee also