C# 如何设置WMI查询的超时?

C# 如何设置WMI查询的超时?,c#,.net,timeout,wmi,C#,.net,Timeout,Wmi,我有一个.NET应用程序,它在所有域计算机上运行WMI查询,以查找登录的用户;它ping每台计算机以确定它是否在线,然后运行实际的查询 代码段: try { string loggedonuser = null; string computername = "ComputerToQuery"; ConnectionOptions co = new ConnectionOptions(); co.Username = "DOMAIN\MyUser";

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

代码段:

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
}
问题是:有时WMI查询会无限期地挂起


如何设置超时?

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

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

获取或设置要应用于的超时 手术。请注意,对于 返回集合的操作, 此超时适用于 通过生成的 集合,而不是操作本身 (该财产为: 用于后者)。这个物业是 用于指示操作 应该执行 半同步


这仅用于连接,不用于实际查询;不管怎样,如果连接花费太多的时间(防火墙等),还是有用的;但就我而言,悬而未决的是质疑。