【问题标题】:Can't return ManagementObjectCollection from method无法从方法返回 ManagementObjectCollection
【发布时间】:2015-12-14 00:11:16
【问题描述】:

所以我有一个从 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;
    }

欢迎提出任何想法!

干杯 戴夫

【问题讨论】:

  • 如果你不想在调用类中捕获 COMException,你可以在 catch(COMexception ex) 块中抛出任何你喜欢的异常。

标签: c# .net wmi


【解决方案1】:

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;
    }

【讨论】:

  • 这是我出错的地方......我正在尝试ManagementObjectCollection ret = new ManagementObjectCollection();,但你不能这样实例化它。它也不喜欢在返回之前不给它赋值,所以我只赋值为null!为您的帮助干杯。
猜你喜欢
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2020-01-10
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多