Mgmtclassgen.exe (генератор строго типизированных классов управления)
Генератор классов управления со строгим типом позволяет быстро создавать управляемые классы с ранней привязкой для указанного класса инструментария управления Windows (WMI). Создаваемый класс снижает сложность кода, необходимого для доступа к экземпляру класса WMI.
Это средство устанавливается автоматически с Visual Studio и пакетом SDK Windows. Чтобы запустить инструмент, мы рекомендуем использовать командную строку 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 |
Класс WMI, для доступа к которому создается управляемый класс с ранней привязкой. |
Параметр |
Описание |
---|---|
/l язык |
Задает язык, на котором создается управляемый класс с ранней привязкой. В качестве аргумента "язык" можно указать CS (C#; по умолчанию), VB (Visual Basic), MC (управляемые расширения для C++) или JS (JScript). |
/m компьютер |
Задает компьютер, к которому следует подключиться и на котором находится соответствующий класс WMI. По умолчанию, это локальный компьютер. |
/n путь |
Задает путь к пространству имен WMI, в котором содержится класс WMI. Если этот параметр не указан, программа создает код для класса_WMI в стандартном пространстве имен Root\cimv2. |
/o пространство_имен_класса |
Задает пространство имен .NET, в котором создается класс управляемого кода. Если этот параметр не указан, программа создает пространство имен, используя пространство имен WMI и префикс схемы. Префикс схемы представляет собой часть имени класса перед знаком подчеркивания. Так, например, для класса Win32_OperatingSystem в пространстве имен Root\cimv2 программа создает класс в пространстве имен ROOT.CIMV2.Win32. |
/p путь_к_файлу |
Задает путь к файлу, в который будет записан созданный код. Если этот параметр не задан, программа создаст файл в текущем каталоге. Имена класса и файла, в котором он будет храниться, образуются на основе аргумента класс_WMI. Имя класса и файла будут совпадать с именем класса_WMI. Если класс_WMI содержит знак подчеркивания, будет использована часть имени класса после этого знака. Так, например, если класс_WMI имеет имя Win32_LogicalDisk, созданным классу и файлу будет присвоено имя "logicaldisk". Если файл с таким именем уже существует, новый файл будет записан поверх старого. |
/pw пароль |
Задает пароль, используемый для подключения к компьютеру, заданному в параметре /m. |
/u имя_пользователя |
Задает имя пользователя, используемое для подключения к компьютеру, заданному в параметре /m. |
/? |
Отображает синтаксис команд и параметры программы. |
Заметки
Средство Mgmtclassgen.exe использует метод ManagementClass.GetStronglyTypedClassCode. Поэтому для генерации кода на управляемом языке, отличном от 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.
Управляемые классы со строгим типом можно создавать также при помощи Server Explorer Management Extension в Visual Studio .NET.
Дополнительные сведения о WMI см. в разделе Инструментарий управления Windows документации по продукту Platform SDK.
Примеры
Следующая команда создает управляемый класс на языке C# для класса 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, и 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);
}
}
См. также
Ссылки
ManagementClass.GetStronglyTypedClassCode
System.CodeDom.Compiler.CodeDomProvider
Командная строка Visual Studio и пакета Windows SDK
Другие ресурсы
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Апрель 2011 |
Добавлены сведения об использовании командных строк Visual Studio и Windows SDK. |
Улучшение информации. |