【发布时间】:2014-10-06 04:29:49
【问题描述】:
我有以下代码检查远程计算机上的服务状态。问题是,如果找不到远程计算机(它宕机什么的),那么ManagementObjectSearcher.Get() 方法需要 20 秒才能抛出“RPC 服务器不可用”的错误。在服务器不可用的情况下,我想明确声明我只希望它尝试一小段时间(比如 3 秒)。我关注了帖子 here,但它声明要在 ManagementObjectSearcher 上使用 Timeout 选项,但我的代码似乎忽略了该值(因为它声明它与集合无关)。这些选项有什么我忽略的吗?我也尝试过使用ReturnImmediatly 属性,但无济于事。
public static void WmiServiceCheck()
{
try
{
var computerName = "SomeInvalidComputer";
var serviceName = "Power";
var managementScope = new ManagementScope(string.Format(@"\\{0}\root\cimv2", computerName));
var objectQuery = new ObjectQuery(string.Format("SELECT * FROM Win32_Service WHERE Name = '{0}'", serviceName));
var searcher = new ManagementObjectSearcher(managementScope, objectQuery);
searcher.Options.Timeout = new TimeSpan(0, 0, 0, 3); // Timeout of 3 seconds
var managementObjectCollection = searcher.Get();
var serviceState = managementObjectCollection.Cast<ManagementObject>().ToList().Single()["State"].ToString();
/// Other stuff here
}
catch (Exception ex)
{
}
}
【问题讨论】: