C# 检查c中是否存在WMI命名空间#

C# 检查c中是否存在WMI命名空间#,c#,wmi,C#,Wmi,我想检查某台机器上是否安装了某项功能。 我有一个powershell代码来检查这个,现在我想从.net代码中检查这个。 我可以看到,在cmdlet中,代码检查是否存在无效命名空间错误 在搜索web时,我发现以下代码: ManagementClass myClass = new ManagementClass(scope, path, getOptions); try { myClass.get(); } catch (System.Management.Exception ex) {

我想检查某台机器上是否安装了某项功能。 我有一个powershell代码来检查这个,现在我想从.net代码中检查这个。 我可以看到,在cmdlet中,代码检查是否存在
无效命名空间
错误

在搜索web时,我发现以下代码:

ManagementClass myClass = new ManagementClass(scope, path, getOptions);

try
{
    myClass.get();
}
catch (System.Management.Exception ex)
{
    if (ex.ErrorCode == ManagementStatus.InvalidNamespace)
    {
         return true;
    }
}
 ...   
我想清理一下这段代码,所以基本上我有两个问题:

  • 是否有其他方法检查
    InvalidNamespace
    错误?(我复制的代码后来被用来调用
    myClass
    中的某个方法,因此我想知道我是否能够以更直接的方式实现我的目标)

  • 我真的需要参数
    getOptions


  • 要获取所有wmi命名空间,必须首先连接到根命名空间,然后查询所有_命名空间实例,并对每个实例递归重复此过程。关于getOptions参数,在这种情况下不需要类,因此可以为null

    检查此代码以获取所有wmi命名空间(您可以用该信息填充列表,然后检查该命名空间是否存在于计算机中)


    要获取所有wmi命名空间,必须首先连接到根命名空间,然后查询所有_命名空间实例,并对每个实例递归重复此过程。关于getOptions参数,在这种情况下不需要类,因此可以为null

    检查此代码以获取所有wmi命名空间(您可以用该信息填充列表,然后检查该命名空间是否存在于计算机中)

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Management;
    
    namespace MyConsoleApplication
    {
        class Program
        {
            static private void GetWmiNameSpaces(string root)
            {
                try
                {
                    ManagementClass nsClass = new ManagementClass( new ManagementScope(root), new ManagementPath("__namespace"), null);
                    foreach (ManagementObject ns in nsClass.GetInstances())
                    {
                        string namespaceName = root + "\\" + ns["Name"].ToString();
                        Console.WriteLine(namespaceName);
                        //call the funcion recursively                               
                        GetWmiNameSpaces(namespaceName);
                    }
                }
                catch (ManagementException e)
                {
                    Console.WriteLine(e.Message);
                }
            }
    
    
            static void Main(string[] args)
            {
                //set the initial root to search
                GetWmiNameSpaces("root");
                Console.ReadKey();
            }
        }
    }