Mgmtclassgen.exe (генератор строго типизированных классов управления)
Генератор классов управления со строгим типом позволяет быстро создавать управляемые классы с ранней привязкой для указанного класса инструментария управления Windows (WMI). Создаваемый класс упрощает код, необходимый для доступа к экземпляру класса WMI.
Синтаксис
mgmtclassgen
WMIClass [options]
Аргумент | Description |
---|---|
WMIClass | Класс WMI, для которого создается управляемый класс с ранней привязкой. |
Вариант | Описание |
---|---|
/l language | Задает язык, на котором создается управляемый класс с ранней привязкой. В качестве аргумента, задающего язык, можно указать CS (C#, используется по умолчанию), VB (Visual Basic), MC (C++) или VS (JScript). |
/m machine | Задает компьютер, к которому следует подключиться и на котором находится соответствующий класс WMI. По умолчанию используется локальный компьютер. |
/n path | Задает путь к пространству имен WMI, в котором содержится класс WMI. Если этот параметр не указан, программа создает код для WMIClass в пространстве имен по умолчанию Root\cimv2. |
/o classnamespace | Задает пространство имен .NET, в котором создается класс управляемого кода. Если этот параметр не указан, программа создает пространство имен, используя пространство имен WMI и префикс схемы. Префикс схемы представляет собой часть имени класса перед знаком подчеркивания. Например, для класса Win32_OperatingSystem в пространстве имен Root\cimv2 программа создает класс в пространстве имен ROOT.CIMV2.Win32. |
/p filepath | Задает путь к файлу, в который будет записан созданный код. Если этот параметр не задан, программа создаст файл в текущем каталоге. Имена класса и файла, в котором он будет храниться, присваиваются на основе аргумента WMIClass. Имя класса и файла совпадают с именем WMIClass. Если WMIClass содержит символ подчеркивания, средство использует часть имени класса после символа подчеркивания. Например, если WMIClass имеет вид Win32_LogicalDisk, созданным классу и файлу будет присвоено имя "logicaldisk". Если файл с таким именем уже существует, новый файл будет записан поверх старого. |
/pw password | Задает пароль, используемый для подключения к компьютеру, заданному в параметре /m. |
/u user name | Задает имя пользователя, используемое для подключения к компьютеру, заданному в параметре /m. |
/? | Отображает синтаксис команд и параметров программы. |
Замечания
Программа Mgmtclassgen.exe использует метод ManagementClass.GetStronglyTypedClassCode. Поэтому для генерации кода на управляемом языке, отличном от C#, Visual Basic и JScript, можно использовать любой нестандартный поставщик кода.
Следует заметить, что создаваемые классы связаны со схемой, для которой они были созданы. Если базовая схема изменяется, для отображения внесенных изменений в схеме класс следует создать повторно.
В следующей таблице приводится соответствие типов модели CIM WMI и типов данных в создаваемых классах.
Тип 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 | Один |
CIM_REAL64 | Двойной |
CIM_BOOLEAN | Boolean |
CIM_String | 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 называется одноэлементным. Таким образом, конструктор без параметров для отдельного класса инициализирует класс в единственном экземпляре.
У класса WMI могут быть свойства, которые являются объектами. При создании класса со строгим типом для данного типа класса WMI следует по возможности создавать классы со строгими типами для типов свойств внедренных объектов. Благодаря этому станет возможен доступ к внедренным объектам в режиме строгой типизации. Следует заметить, что создаваемый код не всегда может определить тип внедренного объекта. В этом случае в созданном коде будет создан комментарий с уведомлением об этой ситуации. Обнаружив такое уведомление, можно изменить созданный код, приписав свойство другому созданному классу.
В WMI значение данных типа CIM_DATETIME может быть представлено как в виде определенной даты и времени, так и в виде временного интервала. Если значение данных представляет собой время и дату, в созданном классе ему будет соответствовать тип данных DateTime. Если значение данных представляет собой временной интервал, в созданном классе ему будет соответствовать тип данных TimeSpan.
Управляемые классы со строгим типом можно создавать также с помощью расширения для управления обозревателем серверов в Visual Studio .NET.
Дополнительные сведения о WMI см. в разделе Инструментарий управления Windows в документации по продукту Platform SDK.
Примеры
При выполнении следующей команды создается управляемый класс на языке C# для класса WMI Win32_LogicalDisk в пространстве имен Root\cimv2. Программа записывает управляемый класс в исходный файл, расположенный в "c:\disk.cs", в пространстве имен ROOT.CIMV2.Win32.
mgmtclassgen Win32_LogicalDisk /n root\cimv2 /l CS /p c:\disk.cs
В следующем примере кода показано, как использовать созданный класс в программе. Сначала экземпляр класса перечисляется, и к нему печатается путь. Затем создается экземпляр инициализируемого класса с экземпляром WMI. Process
— это класс, созданный для Win32_Process, а LogicalDisk
— это класс, созданный для Win32_LogicalDisk в пространстве имен Root\cimv2.
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);
}
}