Utilizzo di oggetti tipizzati in modo sicuro

Il supporto di oggetti tipizzati in modo sicuro è un'altra funzionalità che facilita l'utilizzo della strumentazione di gestione da parte degli sviluppatori di applicazioni. Per rispondere alle necessità di estensibilità del cliente, gli oggetti WMI sono generalmente ad associazione tardiva, caratteristica che non impone la tipizzazione in modo sicuro. Nell'ambiente .NET Framework, WMI consente di generare automaticamente wrapper ad associazione anticipata per oggetti WMI. In questo modo le applicazioni possono utilizzare i wrapper nel codice e sfruttare tutte le funzionalità di assistenza di Microsoft Visual Studio a disposizione per oggetti tipizzati in modo sicuro, ad esempio Intellisense e l'esplorazione degli oggetti. È possibile generare un wrapper tipizzato in modo sicuro con uno dei metodi seguenti:

  • Utilizzando l'utilità MgmtClassGen.exe in .NET Framework SDK.

    Per ulteriori informazioni, vedere Management Strongly Typed Class Generator (mgmtclassgen.exe).

  • Utilizzando l'estensione Server Explorer Management in Visual Studio .NET, che consente di generare automaticamente il wrapper quando si trascina una classe di gestione nella propria finestra di progettazione.

  • A livello di programmazione, utilizzando i metodi System.Management.ManagementClass.GetStronglyTypedClassCode().

I wrapper vengono implementati come classi di codice gestito. In tal modo, offrono un supporto multilinguaggio e possono essere utilizzati con qualsiasi linguaggio di programmazione.

L'esempio seguente è basato sull'esempio dell'argomento Accesso alle informazioni di gestione tramite System.Management, ma, in questo caso, include la classe tipizzata in modo sicuro Service. Prima di eseguire l'esempio, è necessario generare la seguente classe:

C:> managementclassgen Win32_Service /L cs    

(o utilizzare /L vb per i progetti di Visual Basic).

L'output del generatore sarà il file di codice service.cs, da aggiungere al progetto insieme al codice riportato di seguito.

Si noti l'utilizzo di tale classe nell'istruzione foreach al posto della classe generica ManagementObject, oltre all'accesso semplificato alle proprietà degli oggetti restituiti, con la notazione a punti standard:

using System;
using ROOT.CIMV2.Win32;
// Contains the strongly-typed generated class "Service" 
// in ROOT.CIMV2.Win32 namespace
      
class Sample {
   // Enumerate instances of Win32_Service class
   void EnumerateServices() {
      Console.WriteLine("List services and their state");
      foreach(Service ser in Service.GetInstances())
         Console.WriteLine(
      "Service: "+ ser.Name + " is " + ser.State); 
   }
      
   public static void Main(string[] args) {
      Sample test = new Sample();
      test.EnumerateServices();
      return;
   }
}


[Visual Basic]
Imports System
Imports Microsoft.CIMv2.Win32

Public Function EnumerateServices
Console.WriteLine("List services and their state");

'Request the collection of services
Dim searcher As New ManagementObjectSearcher("Win32_Service")

' Enumerate through the collection
Dim serv As Service
For Each serv In searcher.Get()
   Console.WriteLine("Variable : {0}, Value = {1}", _
      serv.Name, serv.VariableValue)
Next serv
End Function 

Vedere anche

Accesso alle informazioni di gestione tramite System.Management | Recupero di insiemi di oggetti di gestione | Esecuzione di query per ottenere informazioni di gestione | Sottoscrizione e utilizzo di eventi | Esecuzione di metodi in oggetti di gestione | Opzioni di servizi remoti e di connessione