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

См. также

Ссылки

System.Management

ManagementClass.GetStronglyTypedClassCode

System.CodeDom.Compiler.CodeDomProvider

Командная строка Visual Studio и пакета Windows SDK

Другие ресурсы

Инструменты .NET Framework

Журнал изменений

Дата

Журнал

Причина

Апрель 2011

Добавлены сведения об использовании командных строк Visual Studio и Windows SDK.

Улучшение информации.