无法从方法

时间:2015-12-14 00:11:17

标签: c# .net wmi

所以我有一个从ServerConnectionTools类调用的方法。它应返回ManagementObjects的集合,但是,如果我们尝试查询的服务器无法访问,则会抛出COMException。

我尝试将Connection放在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;
    }

欢迎任何想法!

干杯 戴夫

1 个答案:

答案 0 :(得分:0)

  

ret区块之外保持try的声明,以便。{   功能它将获得它的可访问性。现在它属于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;
    }