Esposizione di dati di gestione

In uno scenario di gestione dati è possibile che lo sviluppatore desideri esporre una classe per la gestione.

Una classe di .NET Framework viene definita, implementata e contrassegnata per la gestione. È possibile eseguire questa operazione utilizzando l'attributo InstrumentationClass(InstrumentationType.Instance) nella classe o, in alternativa, derivando la classe dalla classe Instance. In tal modo, viene automaticamente generato lo schema di WMI della classe a codice gestito. Le istanze della classe vengono esposte come istanze di WMI con tutti i valori di proprietà mappati.

La definizione di classi di strumentazione viene eseguita in fase di progettazione (fase di compilazione) e rappresenta solo la prima metà della responsabilità di un'applicazione. In fase di esecuzione, con l'applicazione devono essere forniti dati reali. Non è necessario che gli sviluppatori di codice gestito apprendano nuovi metodi per formattare i dati in una struttura utilizzabile da WMI. Utilizzando le stesse classi gestite che consentono di definire le classi di strumentazione di WMI, le applicazioni gestite forniscono dati tramite la creazione di istanze della classe e la compilazione dei campi. I dati esposti tramite WMI verranno letti direttamente dai campi e dalle proprietà della classe gestita.

L'elenco seguente completa i requisiti fondamentali necessari affinché gli sviluppatori di codice gestito possano rendere disponibile la strumentazione tramite WMI:

  • Definizione di classi gestite, in qualsiasi linguaggio supportato, che descrivono la strumentazione.

    Queste classi vengono mappate su classi WMI senza la necessità di comprendere i metodi o la grammatica di WMI per la definizione di classi.

  • In fase di esecuzione le informazioni vengono rese disponibili in WMI tramite la creazione di istanze delle classi, il riempimento dei campi e la pubblicazione delle istanze.

Nell'esempio di codice seguente viene mostrato come creare una classe di istanza di strumentazione di gestione e come pubblicare un'istanza di questa classe in WMI:

using System;
using System.Management;
using System.Configuration.Install;
using System.Management.Instrumentation;

// This example demonstrate how to define a management instrumentation 
// class and how to publish an instance of this class to WMI.

// Specify which namespace the data should be published into
[assembly:Instrumented("root/default")]

// Let the system know InstallUtil.exe utility will be run against 
// this assembly
[System.ComponentModel.RunInstaller(true)]
public class MyInstaller : DefaultManagementProjectInstaller {}   

// Define a management instrumentation class
[InstrumentationClass(InstrumentationType.Instance)]
public class InstanceClass {
    public string Name;
    public int Number;
}
public class Sample_InstanceProvider {
    public static int Main(string[] args) {
        InstanceClass instClass = new InstanceClass();
        instClass. Name = "Hello";
        instClass. Number = 888;
        // Publish this instance to WMI
        Instrumentation.Publish(instClass);        
        Console.WriteLine("Instance now visible through WMI");
        Console.ReadLine();
        Instrumentation.Revoke(instClass); //optional
        return 0;
    }
}

[Visual Basic]
Imports System
Imports System.Management
Imports System.Configuration.Install
Imports System.Management.Instrumentation

' This example demonstrate how to define a management instrumentation
' class and how to publish an instance of this class to WMI.

' Specify which namespace the data should be published into
<assembly: Instrumented("Root/Default")>

' Let the system know InstallUtil.exe utility will be run against 
' this assembly
<System.ComponentModel.RunInstaller(True)>  _
Public Class MyInstaller
   Inherits DefaultManagementProjectInstaller
End Class 

' Create a management instrumentation instance class
<InstrumentationClass(InstrumentationType.Instance)>  _
Public Class InstanceClass
   Public Name As String
   Public Number As Integer
End Class 

Public Class Sample_InstanceProvider      
   Overloads Public Shared Function Main(args() As String) As Integer
      Dim instClass As New InstanceClass()
      instClass.Name = "Hello"
      instClass.Number = 888
      ' Publish this instance to WMI
      System.Management.Instrumentation.Instrumentation.Publish(instClass) 
      Console.WriteLine("Instance now visible through WMI")
      Console.ReadLine()
      System.Management.Instrumentation.Instrumentation.Revoke(instClass)
      Return 0
   End Function 
End Class

Vedere anche

Strumentazione di applicazioni .NET Framework tramite System.Management | Classi e mapping in CLI e WMI | Esposizione di eventi di gestione | Ereditarietà | Registrazione dello schema per un'applicazione con strumentazione