如何设置WMI查询的超时



我有一个。NET应用程序,该应用程序在所有域计算机上运行WMI查询以查找登录的用户;它ping每台计算机以确定它是否在线,然后运行实际的查询。

代码片段:

try
{
    string loggedonuser = null;
    string computername = "ComputerToQuery";
    ConnectionOptions co = new ConnectionOptions();
    co.Username = "DOMAINMyUser";
    co.Password = "MyPassword";
    co.Impersonation = ImpersonationLevel.Impersonate;
    co.Authentication = AuthenticationLevel.Default;
    ManagementPath mp = new ManagementPath(@"\" + computername + @"rootcimv2");
    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
}

问题是:有时WMI查询会无限期地挂起。

如何设置超时?

ManagementObjectSearcher具有Options属性:可用选项之一是Timeout,类型为TimeSpan:

获取或设置要应用的超时操作。请注意,对于返回集合的操作,此超时适用于通过结果枚举集合,而不是操作本身(ReturnImmediate属性为用于后者)。此属性是用于指示操作应该执行半同步。

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

相关内容

  • 没有找到相关文章

最新更新