Generador de clases con establecimiento inflexible de tipos para administración (Mgmtclassgen.exe)
La herramienta Generador de clases con establecimiento inflexible de tipos para administración permite generar con rapidez una clase administrada enlazada tempranamente para una clase especificada de Windows Management Instrumentation (WMI). La clase generada simplifica el código que se debe escribir para tener acceso a una instancia de la clase de WMI.
mgmtclassgen WMIClass [options]
Argumento | Descripción |
---|---|
WMIClass |
Clase de Windows Management Instrumentation para la que se genera una clase administrada enlazada tempranamente. |
Opción | Descripción |
---|---|
/l language |
Especifica el lenguaje en el que se genera la clase administrada enlazada tempranamente. Puede especificar CS (C#; valor predeterminado), VB (Visual Basic), MC (Extensiones administradas de C++), VJ (Visual J#) o JS (JScript) como argumento de lenguaje. |
/m machine |
Especifica el equipo con el que se establece conexión, donde reside la clase de WMI. La opción predeterminada es el equipo local. |
/n path |
Especifica la ruta de acceso al espacio de nombres de WMI que contiene la clase de WMI. Si no se especifica esta opción, la herramienta genera código para WMIClass en el espacio de nombres Root\cimv2 predeterminado. |
/o classnamespace |
Especifica el espacio de nombres de .NET en el que se genera la clase de código administrado. Si no se especifica esta opción, la herramienta genera el espacio de nombres utilizando el espacio de nombres de WMI y el prefijo de esquema. El prefijo de esquema es la parte del nombre de clase que figura delante del carácter de subrayado. Por ejemplo, para la clase Win32_OperatingSystem del espacio de nombres Root\cimv2, la herramienta generaría la clase en ROOT.CIMV2.Win32. |
/p filepath |
Especifica la ruta de acceso al archivo donde se guarda el código generado. Si no se especifica esta opción, la herramienta crea el archivo en el directorio actual. Asigna un nombre a la clase y al archivo donde se genera la clase utilizando el argumento WMIClass. El nombre de la clase y el nombre del archivo son los mismos que el nombre de WMIClass. Si WMIClass contiene un carácter de subrayado, la herramienta utiliza la parte del nombre de clase que figura detrás del carácter de subrayado. Por ejemplo, si el nombre de WMIClass tiene el formato Win32_LogicalDisk, el nombre de la clase generada y del archivo es "logicaldisk". Si ya existe un archivo, la herramienta sobrescribe el archivo existente. |
/pw password |
Especifica la contraseña que se utiliza al iniciar una sesión en el equipo especificado con la opción /m. |
/u Nombre de usuario |
Especifica el nombre de usuario que se utiliza al iniciar una sesión en el equipo especificado con la opción /m. |
/? |
Muestra la sintaxis de comandos y opciones para la herramienta. |
Comentarios
Mgmtclassgen.exe utiliza el método System.Management.ManagementClass.GetStronglyTypedClassCode. Por tanto, se puede utilizar cualquier proveedor de código personalizado para generar código en lenguajes administrados distintos de C#, Visual Basic y JScript.
Conviene señalar que las clases generadas se enlazan al esquema para el que se generan. Si el esquema subyacente cambia, se debe volver a generar la clase si se desea que los cambios se reflejen en el esquema.
La tabla siguiente muestra cómo se asignan tipos CIM (modelo de información común) de WMI a tipos de datos en una clase generada:
Tipo CIM | Tipo de datos en la clase generada |
---|---|
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 o TimeSpan |
CIM_REFERENCE |
ManagementPath |
CIM_CHAR16 |
Char |
CIM_OBJECT |
ManagementBaseObject |
CIM_IUNKNOWN |
Object |
CIM_ARRAY |
Matriz de los objetos mencionados anteriormente |
Conviene señalar los comportamientos siguientes cuando se genera una clase de WMI:
Es posible que un método o una propiedad públicos estándar tengan el mismo nombre que un método o una propiedad existentes. Si esto sucede, la herramienta cambia el nombre del método o de la propiedad en la clase generada para evitar conflictos de nombres.
Es posible que el nombre de un método o de una propiedad en una clase generada sea una palabra clave en el lenguaje de programación de destino. Si esto sucede, la herramienta cambia el nombre del método o de la propiedad en la clase generada para evitar conflictos de nombres.
En WMI, los calificadores son modificadores que contienen información para describir una clase, una instancia, una propiedad o un método. WMI usa calificadores estándar como Read, Write y Key para describir una propiedad en una clase generada. Por ejemplo, una propiedad que se modifica con un calificador Read se define únicamente con un descriptor de acceso get de propiedad en la clase generada. Como una propiedad marcada con el calificador Read está diseñada para ser de sólo lectura, no se define un descriptor de acceso set.
Una propiedad numérica se puede modificar mediante los calificadores Values y ValueMaps para indicar que la propiedad sólo se puede establecer en valores permisibles especificados. Con estos calificadores Values y ValueMaps se genera una enumeración Enumeraciones del sistema de tipos común y la propiedad se asigna a la enumeración.
WMI utiliza el término singleton para describir una clase que sólo puede tener una instancia. Por tanto, el constructor predeterminado para una clase singleton inicializará la clase en la única instancia de la misma.
Una clase de WMI puede tener propiedades que sean objetos. Cuando se genera una clase con establecimiento inflexible de tipos para este tipo de clase de WMI, se debe considerar la posibilidad de generar clases con establecimiento inflexible de tipos para los tipos de las propiedades de objetos incrustados. Esto permitirá tener acceso a los objetos incrustados en modo de establecimiento inflexible de tipos. Conviene señalar que existe la posibilidad de que el código generado no pueda detectar el tipo del objeto incrustado. En este caso, se creará un comentario en el código generado para informar al usuario de este punto. A continuación, se puede modificar el código generado para que el tipo de la propiedad corresponda a la otra clase generada.
En WMI, el valor de los datos del tipo de datos CIM_DATETIME puede representar una fecha y hora específicas o un intervalo de tiempo. Si el valor de los datos representa una fecha y hora, el tipo de datos de la clase generada es DateTime. Si el valor de los datos representa un intervalo de tiempo, el tipo de datos de la clase generada es TimeSpan.
Otra posibilidad consiste en generar una clase con establecimiento inflexible de tipos utilizando la extensión de administración del explorador de servidores en Visual Studio .NET.
Para obtener más información sobre WMI, vea Windows Management Instrumentation (WMI) in .NET Framework y el tema Windows Management Instrumentation en la documentación de Platform SDK.
Ejemplos
El siguiente comando genera una clase administrada en código de C# para la clase de WMI Win32_LogicalDisk en el espacio de nombres Root\cimv2. La herramienta escribe la clase administrada en el archivo de código fuente en c:\disk.cs en el espacio de nombres ROOT.CIMV2.Win32.
mgmtclassgen Win32_LogicalDisk /n root\cimv2 /l CS /p c:\disk.cs
En el ejemplo de código siguiente se muestra la forma de utilizar mediante programación una clase generada. En primer lugar, se enumera una instancia de la clase y se imprime la ruta de acceso. A continuación, se crea una instancia de la clase generada que se va a inicializar con una instancia de WMI. Process
es la clase generada para Win32_Process y LogicalDisk
es la clase generada para Win32_LogicalDisk en el espacio de nombres 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);
}
}
Vea también
Referencia
Herramientas de .NET Framework
System.Management Namespace
System.Management.ManagementClass.GetStronglyTypedClassCode
System.CodeDom.Compiler.CodeDomProvider Class
Símbolo del sistema de SDK
Otros recursos
Windows Management Instrumentation (WMI) in .NET Framework