Compartir a través de


Exponer datos de administración

En un escenario de administración de datos, el programador podría desear exponer una clase para administración.

Una clase de .NET Framework se define, implementa y marca para administración. Para ello, se puede usar el atributo InstrumentationClass(InstrumentationType.Instance) de la propia clase o derivar la clase de otra, en concreto de la clase Instance. De esta forma se genera automáticamente el esquema WMI de la clase de código administrado. Las instancias de la clase se exponen como instancias WMI con todos los valores de las propiedades asignados.

La definición de clases de instrumental se realiza en tiempo de diseño (en tiempo de compilación) y es sólo la primera mitad de la responsabilidad de una aplicación. En tiempo de ejecución, la aplicación debe proporcionar datos reales. No es necesario que los programadores de código administrado aprendan nuevos métodos para dar formato a datos en una estructura que WMI pueda utilizar. Con las mismas clases administradas que definen las clases del instrumental de WMI, para proporcionar los datos las aplicaciones administradas crean una instancia de la clase y rellenan los campos. Los datos expuestos a través de WMI se leerán directamente desde los campos y propiedades de la clase administrada.

En la lista siguiente se incluyen todos los requisitos básicos para que los programadores de código administrado puedan extraer instrumental a través de WMI:

  • Defina las clases administradas (en cualquier lenguaje compatible) que describen el instrumental.

    Dichas clases se asignan a clases WMI sin necesidad de conocer los métodos o la gramática de WMI para definirlas.

  • En tiempo de ejecución, se crean instancias de las clases, se rellenan los campos y se publican las instancias para extraer la información y ponerla a disposición de WMI.

En el ejemplo de código siguiente se demuestra cómo crear una clase de instancia de instrumental de administración y cómo publicar una instancia de dicha clase en 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

Vea también

Instrumentar aplicaciones de .NET Framework con System.Management | Clases y asignación en CLI y WMI | Exponer eventos de administración | Herencia | Registrar el esquema de una aplicación instrumentada