Mgmtclassgen.exe (Hantering av starkt typad klassgenerator)
Med verktyget Hantering med starkt typ av klassgenerator kan du snabbt generera en tidig hanterad klass för en angiven WMI-klass (Windows Management Instrumentation). Den genererade klassen förenklar den kod som du måste skriva för att få åtkomst till en instans av WMI-klassen.
Syntax
mgmtclassgen
WMIClass [options]
Argument | beskrivning |
---|---|
WMIClass | Klassen Windows Management Instrumentation som du vill generera en tidig hanterad klass för. |
Alternativ | Description |
---|---|
/l språk | Anger på vilket språk den tidiga hanterade klassen ska genereras. Du kan ange CS (C#; default), VB (Visual Basic), MC (C++) eller JS (JScript) som språkargument. |
/m-dator | Anger den dator som ska anslutas till, där WMI-klassen finns. Standard är den lokala datorn. |
/n sökväg | Anger sökvägen till WMI-namnområdet som innehåller WMI-klassen. Om du inte anger det här alternativet genererar verktyget kod för WMIClass i standardnamnområdet Root\cimv2 . |
/o classnamespace | Anger det .NET-namnområde där den hanterade kodklassen ska genereras. Om du inte anger det här alternativet genererar verktyget namnområdet med hjälp av WMI-namnområdet och schemaprefixet. Schemaprefixet är den del av klassnamnet som föregår understreckstecknet. För klassen Win32_OperatingSystem i namnområdet Root\cimv2 skulle verktyget till exempel generera klassen i ROOT. CIMV2. Win32. |
/p-filsökväg | Anger sökvägen till filen där den genererade koden ska sparas. Om du inte anger det här alternativet skapar verktyget filen i den aktuella katalogen. Den namnger klassen och filen där den genererar klassen med argumentet WMIClass . Namnet på klassen och filen är samma som namnet på WMIClass. Om WMIClass innehåller ett understreckstecken använder verktyget den del av klassnamnet som följer understreckstecknet. Om till exempel WMIClass-namnet är i formatet Win32_LogicalDisk, får den genererade klassen och filen namnet "logicaldisk". Om det redan finns en fil skriver verktyget över den befintliga filen. |
/pw lösenord | Anger lösenordet som ska användas när du loggar in på en dator som anges av alternativet /m . |
/u användarnamn | Anger det användarnamn som ska användas när du loggar in på en dator som anges av alternativet /m . |
/? | Visar kommandosyntax och alternativ för verktyget. |
Kommentarer
Mgmtclassgen.exe använder ManagementClass.GetStronglyTypedClassCode metoden. Därför kan du använda valfri anpassad kodprovider för att generera kod på andra hanterade språk än C#, Visual Basic och JScript.
Observera att genererade klasser är bundna till det schema som de genereras för. Om det underliggande schemat ändras måste du återskapa klassen om du vill att den ska återspegla ändringar i schemat.
I följande tabell visas hur typer av WMI Common Information Model (CIM) mappas till datatyper i en genererad klass:
CIM-typ | Datatyp i den genererade klassen |
---|---|
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 | Singel |
CIM_REAL64 | Dubbel |
CIM_BOOLEAN | Boolesk |
CIM_String | Sträng |
CIM_DATETIME | DateTime eller TimeSpan |
CIM_REFERENCE | ManagementPath |
CIM_CHAR16 | Char |
CIM_OBJECT | ManagementBaseObject |
CIM_IUNKNOWN | Objekt |
CIM_ARRAY | Matris för ovan nämnda objekt |
Observera följande beteenden när du genererar en WMI-klass:
Det är möjligt att en offentlig standardegenskap eller -metod har samma namn som en befintlig egenskap eller metod. Om detta inträffar ändrar verktyget namnet på egenskapen eller metoden i den genererade klassen för att undvika namngivningskonflikter.
Det är möjligt att namnet på en egenskap eller metod i en genererad klass är ett nyckelord i målprogrammeringsspråket. Om detta inträffar ändrar verktyget namnet på egenskapen eller metoden i den genererade klassen för att undvika namngivningskonflikter.
I WMI är kvalificerare modifierare som innehåller information för att beskriva en klass, instans, egenskap eller metod. WMI använder standardkvalificerare som Read, Write och Key för att beskriva en egenskap i en genererad klass. Till exempel definieras en egenskap som ändras med en Läs-kvalificerare endast med en egenskap som får åtkomst i den genererade klassen. Eftersom en egenskap som är markerad med Läs-kvalificeraren är avsedd att vara skrivskyddad, definieras inte en uppsättningsåtkomst .
En numerisk egenskap kan ändras av värden och ValueMaps-kvalificerare för att indikera att egenskapen endast kan anges till angivna tillåtna värden. En uppräkning genereras med dessa Värden och ValueMaps och egenskapen mappas till uppräkningen.
WMI använder termen singleton för att beskriva en klass som bara kan ha en instans. Därför initierar den parameterlösa konstruktorn för en singleton-klass klassen till den enda instansen av klassen.
En WMI-klass kan ha egenskaper som är objekt. När du genererar en starkt skriven klass för den här typen av WMI-klass bör du överväga att generera starkt skrivna klasser för typerna av de inbäddade objektegenskaperna. På så sätt kan du komma åt de inbäddade objekten på ett starkt skrivet sätt. Observera att den genererade koden kanske inte kan identifiera typen av det inbäddade objektet. I det här fallet skapas en kommentar i den genererade koden för att meddela dig om det här problemet. Du kan sedan ändra den genererade koden för att skriva egenskapen till den andra genererade klassen.
I WMI kan datavärdet för den CIM_DATETIME datatypen representera antingen ett specifikt datum och en viss tid eller ett tidsintervall. Om datavärdet representerar ett datum och en tid är datatypen i den genererade klassen DateTime. Om datavärdet representerar ett tidsintervall är datatypen i den genererade klassen TimeSpan.
Du kan också generera en starkt skriven klass med serverutforskarens hanteringstillägg i Visual Studio .NET.
Mer information om WMI finns i avsnittet Windows Management Instrumentation i dokumentationen för Platform SDK.
Exempel
Följande kommando genererar en hanterad klass i C#-kod för Win32_LogicalDisk WMI-klass i namnområdet Root\cimv2 . Verktyget skriver den hanterade klassen till källfilen på c:\disk.cs i ROT. CIMV2. Win32-namnrymd .
mgmtclassgen Win32_LogicalDisk /n root\cimv2 /l CS /p c:\disk.cs
I följande kodexempel visas hur du använder en genererad klass programmatiskt. Först räknas en instans av klassen upp och sökvägen skrivs ut. Därefter skapas en instans av den genererade klassen som ska initieras med en instans av WMI. Process
är den klass som genereras för Win32_Process och är den klass som genereras för Win32_LogicalDisk i namnområdet Root\cimv2.LogicalDisk
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);
}
}