Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el código de ejemplo siguiente se utilizan las clases de la colección System.Management para enumerar las variables de entorno de un equipo. En este ejemplo, algunos parámetros se pueden dejar con los valores predeterminados porque la información se obtiene del equipo local. Asimismo, se devuelve una colección que incluye todos los objetos de la clase especificada (Win32_Environment). Después de recuperar la colección, el código la enumera mediante la instrucción foreach y muestra el nombre y el valor de cada variable de la colección. Los programadores que estén familiarizados con la API Scripting para WMI notarán algunas similitudes. Se muestran dos variaciones: en la primera se usa la clase ManagementObjectSearcher con la forma más simple de una consulta que representa básicamente una enumeración completa; en la segunda se obtiene el objeto de clase para Win32_Environment y se usa el método GetInstances() para enumerar sus instancias.
using System;
using System.Management;
// This example demonstrates how to perform a synchronous instance enumeration.
public class EnumerateInstances {
public static int Main(string[] args) {
// Build a query for enumeration of Win32_Environment instances
SelectQuery query = new SelectQuery("Win32_Environment");
// Instantiate an object searcher with this query
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
// Call Get() to retrieve the collection of objects and loop through it
foreach (ManagementBaseObject envVar in searcher.Get())
Console.WriteLine("Variable : {0}, Value = {1}",
envVar["Name"],envVar["VariableValue"]);
return 0;
}
}
[Visual Basic]
Imports System
Imports System.Management
' This example demonstrates how to perform a synchronous instance enumeration.
Public Class EnumerateInstances
Overloads Public Shared Function Main(args() As String) As Integer
' Build a query for enumeration of Win32_Environment instances
Dim query As New SelectQuery("Win32_Environment")
' Instantiate an object searcher with this query
Dim searcher As New ManagementObjectSearcher(query)
' Call Get() to retrieve the collection of objects and loop through it
Dim envVar As ManagementBaseObject
For Each envVar In searcher.Get()
Console.WriteLine("Variable : {0}, Value = {1}", _
envVar("Name"), envVar("VariableValue"))
Next envVar
Return 0
End Function
End Class
El acceso a información de administración suele suceder en entornos distribuidos y puede tratarse de cantidades enormes de datos. Para hacerlo posible, las operaciones de administración también pueden realizarse de manera asincrónica. En el ejemplo siguiente se muestra cómo enumerar todos los servicios de un equipo en un modelo de codificación asincrónico. El método utilizado para llamar a una operación de manera asincrónica es una sobrecarga del método sincrónico, en la que se incluye un parámetro adicional del tipo ManagementOperationObserver con el fin de controlar las devoluciones de llamadas de los resultados. Este objeto define eventos para notificaciones de los resultados y de la finalización, a los que se suscriben controladores que se ejecutan cuando se generan estos eventos.
using System;
using System.Management;
// This example demonstrates how to perform an asynchronous instance enumeration.
public class EnumerateInstancesAsync {
public static int Main(string[] args) {
//Enumerate asynchronously using Object Searcher
//===============================================
//Instantiate an object searcher with the query
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(new SelectQuery("Win32_Service"));
// Create a results watcher object, and handler for results and completion
ManagementOperationObserver results = new ManagementOperationObserver();
ObjectHandler objectHandler = new ObjectHandler();
// Attach handler to events for results and completion
results.ObjectReady += new ObjectReadyEventHandler(objectHandler.NewObject);
results.Completed += new CompletedEventHandler(objectHandler.Done);
//Call the asynchronous overload of Get() to start the enumeration
searcher.Get(results);
//Do something else while results arrive asynchronously
while (!objectHandler.IsCompleted) {
System.Threading.Thread.Sleep (1000);
}
objectHandler.Reset();
return 0;
}
//Handler for asynchronous results
public class ObjectHandler {
private bool isCompleted = false;
public void NewObject(object sender, ObjectReadyEventArgs obj) {
Console.WriteLine("Service : {0}, State = {1}",
obj.NewObject["Name"], obj.NewObject["State"]);
}
public bool IsCompleted {
get {
return isCompleted;
}
}
public void Reset() {
isCompleted = false;
}
public void Done(object sender, CompletedEventArgs obj) {
isCompleted = true;
}
}
}
Vea también
Acceso a la información de administración con System.Management | Consultar información de administración | Suscribir y consumir eventos | Ejecutar métodos en objetos de administración | Interacción remota y opciones de conexión | Utilizar objetos con establecimiento inflexible de tipos