C# 如何设置WMI查询的超时?
我有一个.NET应用程序,它在所有域计算机上运行WMI查询,以查找登录的用户;它ping每台计算机以确定它是否在线,然后运行实际的查询 代码段: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";
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
:
获取或设置要应用于的超时
手术。请注意,对于
返回集合的操作,
此超时适用于
通过生成的
集合,而不是操作本身
(该财产为:
用于后者)。这个物业是
用于指示操作
应该执行
半同步
这仅用于连接,不用于实际查询;不管怎样,如果连接花费太多的时间(防火墙等),还是有用的;但就我而言,悬而未决的是质疑。