2015-12-14 47 views
0

返回ManagementObjectCollection所以我有一个从ServerConnectionTools类调用的方法。它应该返回一个ManagementObjects集合,但是,如果服务器为什么试图查询不可访问,它会抛出一个COMException异常。无法从方法

我尝试将连接放置在try/catch内的作用域,但这意味着如果它在赋值之前失败,则不会设置ret值。

什么是最好的处理方法?直到现在,我一直试图让功能工作,而不是专注于错误处理,所以我仍然在学习绳索!

我也不知道我是否应该在COMException中引发一个事件来通知调用类连接失败,或者以其他方式处理它......我认为在调用类中捕获COMException会是错误的方法?

public ManagementObjectCollection GetServicesList() 
    { 

     try 
     { 
      // Connect our scope to the actual WMI scope 
      this.Scope.Connect(); 

      // Query system for Eclipse Services 
      ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Service WHERE Caption LIKE 'xxx%'"); 
      ManagementObjectSearcher searcher = new ManagementObjectSearcher(this.Scope, query); 
      ManagementObjectCollection ret = searcher.Get(); 
     } 
     catch (COMException ex) 
     { 
      ServerConnectionFailure?.Invoke(this, null); 
     } 


     return ret; 
    } 

任何想法都是最受欢迎的!

干杯 戴夫try块外的ret

+0

如果你不想在调用类捉收到COMException,你可以扔掉你在catch喜欢的任何异常(收到COMException前)块。 – 3per

回答

0

保留声明,使 功能会得到它的辅助功能。现在它只属于try 块。

所以你的方法签名会像下面这样:

public ManagementObjectCollection GetServicesList() 
    { 
     ManagementObjectCollection ret=new ManagementObjectCollection(); //declaration of the collection 
     try 
     { 
      this.Scope.Connect(); 
      ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Service WHERE Caption LIKE 'xxx%'"); 
      ManagementObjectSearcher searcher = new ManagementObjectSearcher(this.Scope, query); 
      ret = searcher.Get(); 
     } 
     catch (COMException ex) 
     { 
      ServerConnectionFailure?.Invoke(this, null); 
     } 
     return ret; 
    } 
+0

这是我出错的地方......我正在尝试'ManagementObjectCollection ret = new ManagementObjectCollection();'但是你不能像那样实例化它。它也不喜欢在返回之前不给它赋值,所以我只给了null!欢呼你的帮助。 – dc799