Generatore di classi di gestione fortemente tipizzate (Mgmtclassgen.exe)

Aggiornamento: novembre 2007

Lo strumento Generatore di classi di gestione fortemente tipizzate (Mgmtclassgen.exe) consente di generare velocemente una classe gestita ad associazione precoce per una classe WMI (Windows Management Instrumentation, Strumentazione gestita Windows) specifica. L'utilizzo della classe generata semplifica la scrittura del codice per l'accesso a un'istanza della classe WMI.

mgmtclassgen WMIClass [options] 

Argomento

Descrizione

WMIClass

La classe WMI per la quale generare una classe gestita ad associazione precoce.

Opzione

Descrizione

/l language

Specifica il linguaggio che si desidera utilizzare per la generazione della classe gestita ad associazione precoce. Come argomento del linguaggio è possibile specificare CS (C#; impostazione predefinita), VB (Visual Basic), MC (estensioni gestite per C++), VJ (Visual J#) o JS (JScript).

/m machine

Specifica il computer al quale eseguire la connessione ovvero quello sul quale risiede la classe WMI. Il valore predefinito è il computer locale.

/n path

Specifica il percorso dello spazio dei nomi WMI contenente la classe WMI. Se non si specifica questa opzione il codice per la WMIClass verrà generato per impostazione predefinita nello spazio dei nomi Root\cimv2.

/o classnamespace

Specifica lo spazio dei nomi .NET nel quale generare la classe gestita ad associazione precoce. Se non si specifica questa opzione lo spazio dei nomi verrà generato utilizzando lo spazio dei nomi WMI e il prefisso dello schema. Il prefisso dello schema è la parte del nome della classe che precede il carattere di sottolineato. Nel caso della classe Win32_OperatingSystem nello spazio dei nomi Root\cimv2, ad esempio, la classe verrà generata nello spazio dei nomi ROOT.CIMV2.Win32.

/p filepath

Specifica il percorso del file in cui salvare il codice generato. Se non si specifica questa opzione il file verrà creato nella directory corrente. La classe e il file nel quale viene generata la classe avranno argomento WMIClass e avranno lo stesso nome della WMIClass. Se il nome della WMIClass include un carattere di sottolineatura verrà utilizzata solo la parte del nome della classe che segue tale carattere. Se il nome della WMIClass presenta, ad esempio, il formato Win32_LogicalDisk il nome della classe e del file generati sarà "logicaldisk". Se esiste già un file con tale nome il file verrà sovrascritto.

/pw password

Specifica la password da utilizzare per l'accesso a un computer specificato dall'opzione /m.

/u user name

Specifica il nome utente da utilizzare per l'accesso a un computer specificato dall'opzione /m.

/?

Visualizza la sintassi e le opzioni dei comandi dello strumento.

Note

Mgmtclassgen.exe utilizza il metodo System.Management.ManagementClass.GetStronglyTypedClassCode. È possibile pertanto utilizzare un provider di codice personalizzato per generare codice in linguaggi gestiti diversi dai linguaggi C#, Visual Basic e JScript.

Le classi generate sono associate allo schema per il quale sono state generate. Quando lo schema sottostante una classe viene modificato è necessario generare nuovamente la classe se si desidera che essa rispecchi le modifiche dello schema.

Nella tabella riportata di seguito viene illustrata l'associazione tra i tipi CIM (Common Information Model) WMI e i tipi dati inclusi in una classe generata.

Tipo CIM

Tipo dati incluso nella classe generata

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

Singola

CIM_REAL64

Double

CIM_BOOLEAN

Boolean

CIM_String

Stringa

CIM_DATETIME

DateTime o TimeSpan

CIM_REFERENCE

ManagementPath

CIM_CHAR16

Char

CIM_OBJECT

ManagementBaseObject

CIM_IUNKNOWN

Object

CIM_ARRAY

Matrici degli oggetti precedenti.

Quando viene generata una classe WMI può accadere quanto segue:

  • Una proprietà o un metodo pubblico standard può avere lo stesso nome di una proprietà o di un metodo esistente. In tal caso il nome della proprietà o del metodo nella classe generata verrà automaticamente cambiato per evitare conflitti di denominazione.

  • Il nome di una proprietà o di un metodo in una classe generata può essere una parola chiave nel linguaggio di programmazione di destinazione. In tal caso il nome della proprietà o del metodo nella classe generata verrà automaticamente cambiato per evitare conflitti di denominazione.

  • In WMI un qualificatore è un modificatore contenente informazioni per descrivere una classe, un'istanza, una proprietà o un metodo. Per descrivere una proprietà in una classe generata la strumentazione WMI utilizza qualificatori standard quali Read, Write e Key. Una proprietà modificata con il qualificatore Read, ad esempio, viene definita nella classe generata solo con una funzione di accesso get. Poiché una proprietà con qualificatore Read deve essere di sola lettura, non viene definita alcuna funzione di accesso set.

  • Una proprietà numerica può essere modificata tramite i qualificatori Values e ValueMaps per indicare che la proprietà può essere impostata solo su valori ammissibili specificati. Viene generato un oggetto Enumerazioni nel sistema di tipi comuniEnumeration con i qualificatori Values e ValueMaps e viene eseguito il mapping della proprietà rispetto all'enumerazione.

  • La strumentazione WMI utilizza il termine Singleton per descrivere una classe che può avere una sola istanza. Il costruttore predefinito per una classe Singleton, pertanto, inizializzerà la classe all'unica istanza della classe.

  • Le proprietà di una classe WMI possono essere oggetti. Quando si genera una classe fortemente tipizzata per questo tipo di classe WMI è consigliato generare classi fortemente tipizzate per i tipi delle proprietà degli oggetti incorporati. Sarà così possibile eseguire un accesso fortemente tipizzato agli oggetti incorporati. Il codice generato potrebbe non essere in grado di individuare il tipo dell'oggetto incorporato. In tal caso nel codice generato verrà creato un commento che notifica il problema. Sarà possibile modificare il codice generato per specificare il tipo della classe e impostarlo sull'altra classe generata.

  • In WMI il valore dei dati del tipo di dati CIM_DATETIME può rappresentare una data e ora specifiche o un intervallo di tempo. Se il valore dei dati rappresenta una data e ora, il tipo di dati nella classe generata sarà DateTime. Se il valore dei dati rappresenta un intervallo di tempo, il tipo di dati nella classe generata sarà TimeSpan.

In alternativa è possibile generare una classe fortemente tipizzata utilizzando l'estensione di gestione di Esplora server di Visual Studio .NET.

Per ulteriori informazioni su WMI, vedere l'argomento Windows Management Instrumentation nella documentazione di Platform SDK.

Esempi

Il comando che segue consente di generare una classe gestita in codice C# per la classe WMI Win32_LogicalDisk nello spazio dei nomi Root\cimv2. La classe gestita verrà automaticamente scritta nel file di origine che si trova nel percorso c:\disk.cs nello spazio dei nomi ROOT.CIMV2.Win32.

mgmtclassgen Win32_LogicalDisk /n root\cimv2 /l CS /p c:\disk.cs

Nel codice di esempio riportato di seguito si illustra come utilizzare a livello di programmazione una classe generata. Innanzitutto viene enumerata un'istanza della classe e viene stampato il percorso. Viene quindi creata un'istanza della classe generata da inizializzare con un'istanza di WMI. Process è la classe generata per Win32_Process e LogicalDisk è la classe generata per Win32_LogicalDisk nello spazio dei nomi 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);
   }
}

Vedere anche

Riferimenti

Strumenti di .NET Framework

System.Management

System.Management.ManagementClass.GetStronglyTypedClassCode

System.CodeDom.Compiler.CodeDomProvider

Prompt dei comandi di SDK