Mgmtclassgen.exe (management sterk getypte klassegenerator)
Met het hulpprogramma Management Sterk getypte klassegenerator kunt u snel een vroeg gebonden beheerde klasse genereren voor een opgegeven WMI-klasse (Windows Management Instrumentation). De gegenereerde klasse vereenvoudigt de code die u moet schrijven om toegang te krijgen tot een exemplaar van de WMI-klasse.
Syntaxis
mgmtclassgen
WMIClass [options]
Argument | Beschrijving |
---|---|
WMIClass | De Windows Management Instrumentation-klasse waarvoor een vroege beheerde klasse moet worden gegenereerd. |
Optie | Omschrijving |
---|---|
/l taal | Hiermee geeft u de taal op waarin de vroege beheerde klasse moet worden gegenereerd. U kunt CS (C#; standaard), VB (Visual Basic), MC (C++) of JS (JScript) opgeven als taalargument. |
/m machine | Hiermee geeft u de computer verbinding mee, waar de WMI-klasse zich bevindt. Standaard is dit de lokale computer. |
/n pad | Hiermee geeft u het pad naar de WMI-naamruimte die de WMI-klasse bevat. Als u deze optie niet opgeeft, genereert het hulpprogramma code voor WMIClass in de standaardnaamruimte Root\cimv2 . |
/o classnamespace | Hiermee geeft u de .NET-naamruimte op waarin de beheerde codeklasse moet worden gegenereerd. Als u deze optie niet opgeeft, genereert het hulpprogramma de naamruimte met behulp van de WMI-naamruimte en het schemavoorvoegsel. Het schemavoorvoegsel is het deel van de klassenaam voorafgaand aan het onderstrepingsteken. Voor de Win32_OperatingSystem-klasse in de root\cimv2-naamruimte genereert het hulpprogramma bijvoorbeeld de klasse in ROOT. CIMV2. Win32. |
/p-bestandspad | Hiermee geeft u het pad naar het bestand waarin de gegenereerde code moet worden opgeslagen. Als u deze optie niet opgeeft, maakt het hulpprogramma het bestand in de huidige map. De klasse en het bestand waarin de klasse wordt gegenereerd met behulp van het argument WMIClass . De naam van de klasse en het bestand zijn dezelfde als de naam van de WMIClass. Als WMIClass een onderstrepingsteken bevat, gebruikt het hulpprogramma het deel van de klassenaam na het onderstrepingsteken. Als de naam van de WMIClass bijvoorbeeld de indeling heeft Win32_LogicalDisk, heeft de gegenereerde klasse en het bestand de naam 'logicaldisk'. Als er al een bestand bestaat, overschrijft het hulpprogramma het bestaande bestand. |
/pw-wachtwoord | Hiermee geeft u het wachtwoord op dat moet worden gebruikt wanneer u zich aanmeldt bij een computer die is opgegeven door de optie /m . |
/u gebruikersnaam | Hiermee geeft u de gebruikersnaam die moet worden gebruikt bij het aanmelden bij een computer die is opgegeven door de optie /m . |
/? | Geeft de opdrachtsyntaxis en opties voor het hulpprogramma weer. |
Opmerkingen
Mgmtclassgen.exe gebruikt de ManagementClass.GetStronglyTypedClassCode methode. Daarom kunt u elke aangepaste codeprovider gebruiken om code te genereren in andere beheerde talen dan C#, Visual Basic en JScript.
Houd er rekening mee dat gegenereerde klassen zijn gebonden aan het schema waarvoor ze worden gegenereerd. Als het onderliggende schema wordt gewijzigd, moet u de klasse opnieuw genereren als u de wijzigingen in het schema wilt weergeven.
In de volgende tabel ziet u hoe CIM-typen (Common Information Model) van WMI worden toegewezen aan gegevenstypen in een gegenereerde klasse:
CIM-type | Gegevenstype in de gegenereerde klasse |
---|---|
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 | Ongetrouwd |
CIM_REAL64 | Dubbel |
CIM_BOOLEAN | Booleaanse waarde |
CIM_String | Tekenreeks |
CIM_DATETIME | DateTime of TimeSpan |
CIM_REFERENCE | ManagementPath |
CIM_CHAR16 | Char |
CIM_OBJECT | ManagementBaseObject |
CIM_IUNKNOWN | Object |
CIM_ARRAY | Matrix van de hierboven genoemde objecten |
Let op het volgende gedrag wanneer u een WMI-klasse genereert:
Het is mogelijk dat een standaard openbare eigenschap of methode dezelfde naam heeft als een bestaande eigenschap of methode. Als dit gebeurt, wijzigt het hulpprogramma de naam van de eigenschap of methode in de gegenereerde klasse om naamconflicten te voorkomen.
Het is mogelijk dat de naam van een eigenschap of methode in een gegenereerde klasse een trefwoord in de doelprogrammeertaal is. Als dit gebeurt, wijzigt het hulpprogramma de naam van de eigenschap of methode in de gegenereerde klasse om naamconflicten te voorkomen.
In WMI zijn kwalificaties modifiers die informatie bevatten om een klasse, instantie, eigenschap of methode te beschrijven. WMI maakt gebruik van standaardkwalificaties zoals Lezen, Schrijven en Sleutel om een eigenschap in een gegenereerde klasse te beschrijven. Een eigenschap die wordt gewijzigd met een leeskwalificatie , wordt bijvoorbeeld alleen gedefinieerd met een eigenschap get accessor in de gegenereerde klasse. Omdat een eigenschap die is gemarkeerd met de leeskwalificatie bedoeld is om alleen-lezen te zijn, wordt er geen set accessor gedefinieerd.
Een numerieke eigenschap kan worden gewijzigd door de waarden- en ValueMaps-kwalificaties om aan te geven dat de eigenschap alleen kan worden ingesteld op opgegeven toegestane waarden. Er wordt een opsomming gegenereerd met deze Waarden en ValueMaps en de eigenschap wordt toegewezen aan de opsomming.
De WMI gebruikt de term singleton om een klasse te beschrijven die slechts één exemplaar kan hebben. Daarom initialiseert de parameterloze constructor voor een singleton-klasse de klasse naar het enige exemplaar van de klasse.
Een WMI-klasse kan eigenschappen hebben die objecten zijn. Wanneer u een sterk getypte klasse genereert voor dit type WMI-klasse, kunt u overwegen om sterk getypte klassen te genereren voor de typen van de eigenschappen van het ingesloten object. Hiermee hebt u toegang tot de ingesloten objecten op een sterk getypte manier. Houd er rekening mee dat de gegenereerde code mogelijk het type van het ingesloten object niet kan detecteren. In dit geval wordt er een opmerking gemaakt in de gegenereerde code om u op de hoogte te stellen van dit probleem. Vervolgens kunt u de gegenereerde code wijzigen om de eigenschap te typen in de andere gegenereerde klasse.
In WMI kan de gegevenswaarde van het CIM_DATETIME gegevenstype een specifieke datum en tijd of een tijdsinterval vertegenwoordigen. Als de gegevenswaarde een datum en tijd vertegenwoordigt, is het gegevenstype in de gegenereerde klasse DateTime. Als de gegevenswaarde een tijdsinterval vertegenwoordigt, is het gegevenstype in de gegenereerde klasse TimeSpan.
U kunt ook een sterk getypte klasse genereren met behulp van de Server Explorer-beheerextensie in Visual Studio .NET.
Zie het onderwerp Windows Management Instrumentation in de platform-SDK-documentatie voor meer informatie over WMI.
Voorbeelden
Met de volgende opdracht wordt een beheerde klasse in C#-code gegenereerd voor de Win32_LogicalDisk WMI-klasse in de naamruimte Root\cimv2 . Het hulpprogramma schrijft de beheerde klasse naar het bronbestand op c:\disk.cs in de ROOT. CIMV2. Win32-naamruimte .
mgmtclassgen Win32_LogicalDisk /n root\cimv2 /l CS /p c:\disk.cs
In het volgende codevoorbeeld ziet u hoe u programmatisch een gegenereerde klasse gebruikt. Eerst wordt een exemplaar van de klasse geïnventariseerd en wordt het pad afgedrukt. Vervolgens wordt er een exemplaar van de gegenereerde klasse gemaakt met een exemplaar van WMI. Process
is de klasse die wordt gegenereerd voor Win32_Process en is de klasse die wordt gegenereerd voor Win32_LogicalDisk in de naamruimte 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);
}
}