2011-06-15 10 views
9

Tengo una aplicación .NET que ejecuta consultas WMI en todos los equipos de dominio para encontrar el usuario que ha iniciado sesión; hace sonar cada computadora para ver si está en línea o no, luego ejecuta la consulta real.¿Cómo establecer un tiempo de espera en las consultas de WMI?

Fragmento de código:

try 
{ 
    string loggedonuser = null; 

    string computername = "ComputerToQuery"; 

    ConnectionOptions co = new ConnectionOptions(); 

    co.Username = "DOMAIN\MyUser"; 
    co.Password = "MyPassword"; 

    co.Impersonation = ImpersonationLevel.Impersonate; 
    co.Authentication = AuthenticationLevel.Default; 

    ManagementPath mp = new ManagementPath(@"\\" + computername + @"\root\cimv2"); 

    ManagementScope ms = new ManagementScope(mp,co); 

    ms.Connect(); 

    ObjectQuery oq = new ObjectQuery("SELECT username FROM Win32_ComputerSystem"); 

    ManagementObjectSearcher mos = new ManagementObjectSearcher(ms,oq); 

    foreach(ManagementObject mo in mos.Get()) 
     loggedonuser = (String) mo["username"]; 
} 
catch(Exception e) 
{ 
    // Handle WMI exception 
} 

El problema: a veces la consulta WMI cuelga indefinidamente.

¿Cómo puedo establecer un tiempo de espera en él?

Respuesta

12

El ManagementObjectSearcher tiene una propiedad Options: una de las opciones disponibles es Timeout, de tipo TimeSpan:

Obtiene o establece el tiempo de espera para aplicar a la operación. Tenga en cuenta que para operaciones que devuelven colecciones, este tiempo de espera se aplica a la enumeración a través de la colección resultante, no la operación en sí (la propiedad es ReturnImmediately utilizado para el último). Esta propiedad es y se usa para indicar que la operación se debe realizar de forma semisincrónica.

+0

Genial, funciona. – Massimo

6

Trate co.Timeout = new TimeSpan(0, 0, 30);

+0

Esto es solo para la conexión, no para la consulta real; útil de todos modos, si la conexión toma demasiado tiempo (cortafuegos, etc.); pero en mi caso es la * consulta * la que está colgando. – Massimo

Cuestiones relacionadas