Генератор классов управления со строгими типами (Mgmtclassgen.exe)
Обновлен: Ноябрь 2007
Генератор классов управления со строгим типом позволяет быстро создавать управляемые классы с ранней привязкой для указанного класса инструментария управления Windows (WMI). Создаваемый класс снижает сложность кода, необходимого для доступа к экземпляру класса WMI.
mgmtclassgen WMIClass [options]
Аргумент |
Описание |
---|---|
WMIClass |
Класс WMI, для доступа к которому создается управляемый класс с ранней привязкой. |
Параметр |
Описание |
---|---|
/l язык |
Задает язык, на котором создается управляемый класс с ранней привязкой. В качестве аргумента "язык" можно указать CS (C#, принимается по умолчанию), VB (Visual Basic), MC (управляемые расширения для C++), VJ (Visual J#) или 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 использует метод System.Management.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 |
String |
CIM_DATETIME |
DateTime или TimeSpan |
CIM_REFERENCE |
ManagementPath |
CIM_CHAR16 |
Char |
CIM_OBJECT |
ManagementBaseObject |
CIM_IUNKNOWN |
Object |
CIM_ARRAY |
Массив указанных выше объектов |
Отметим следующие особенности процесса создания классов WMI:
Стандартное открытое свойство или метод может иметь имя, совпадающее с именем существующего свойства или метода. В этом случае программа изменит имя свойства или метода в создаваемом классе, чтобы избежать конфликта имен.
Стандартное свойство или метод создаваемого класса может иметь имя, совпадающее с зарезервированным словом используемого языка программирования. В этом случае программа изменит имя свойства или метода в создаваемом классе, чтобы избежать конфликта имен.
В WMI квалификаторами называются модификаторы, которые содержат информацию, описывающую класс, экземпляр, свойство или метод. WMI использует для описания свойств создаваемого класса стандартные квалификаторы, такие как Read, Write, и Key. Так, свойство, измененное квалификатором Read, определяется только совместно с методом get доступа к этому свойству в создаваемом классе. Поскольку свойство, помеченное квалификатором Read, предназначено только для чтения, метод set не определяется.
Числовые свойства могут быть модифицированы при помощи квалификаторов Values и ValueMaps , которые показывают, что свойство может принимать только указанные допустимые значения. Перечисления в системе общих типов CTS создается на основе этих квалификаторов 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_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);
}
}
См. также
Ссылки
System.Management.ManagementClass.GetStronglyTypedClassCode