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

我想检查某台机器上是否安装了某个function。 我有一个powershell代码来检查这个,现在我想从.net代码检查这个。 我可以看到在cmdlet中,代码检查是否存在invalid namespace错误。

在网上搜索时,我发现了以下代码:

 ManagementClass myClass = new ManagementClass(scope, path, getOptions); try { myClass.get(); } catch (System.Management.Exception ex) { if (ex.ErrorCode == ManagementStatus.InvalidNamespace) { return true; } } ... 

我想稍微清理一下这段代码,所以基本上我有两个问题:

  1. 有没有其他方法来检查InvalidNamespace错误? (我复制的代码后来被用来调用myClass一些方法,所以我想知道我是否可以用更直接的方式实现我的目标)

  2. 我真的需要参数getOptions吗?

要获取所有wmi命名空间,必须首先连接到根命名空间,然后查询所有__NAMESPACE实例,并为每个实例递归地重复此过程。 关于getOptions参数,在这种情况下不需要ObjectGetOptions类,因此可以为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(); } } }