System.Management.ManagementException

时间:2011-03-09 15:01:12

标签: c# .net system.management

我正在运行以下代码:

System.Management.ManagementClass wmiNetAdapterConfiguration = new System.Management.ManagementClass("Win32_NetworkAdapterConfiguration");
System.Management.ManagementObjectCollection wmiNetAdapters = wmiNetAdapterConfiguration.GetInstances();
Log.logInfo("Net adapters:" + wmiNetAdapters.get_Count());

在某些机器上它没问题,而在一些机器上我得到了以下错误:

  

System.Management.ManagementException:Not found

调用堆栈:

System.Management.ManagementException: Not found 
   at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
   at System.Management.ManagementScope.InitializeGuts(Object o)
   at System.Management.ManagementScope.Initialize()
   at System.Management.ManagementObject.Initialize(Boolean getObject)
   at System.Management.ManagementClass.GetInstances(EnumerationOptions options)
   at System.Management.ManagementClass.GetInstances()

知道为什么吗?

3 个答案:

答案 0 :(得分:11)

System.Management namespace提供的功能取决于WMI (Windows Management Instrumentation)服务。

我怀疑WMI服务尚未在抛出该异常的系统上启动。

出于疑难解答的目的,您可以使用“管理工具”→“服务”实用程序进行验证。

如果情况确实如此,您可以将代码包装在try - catch块中,并使用ServiceController class启动和停止相应的服务。

答案 1 :(得分:1)

我们刚刚遇到了同样的问题,并按照以下链接的帖子逐步进行,并且能够成功解决问题。

https://answers.microsoft.com/en-us/windows/forum/all/systemmanagementmanagementexception-invalid/74ac22c7-509d-42a5-9f7f-2686dc87b7b2

  

基本上,打开计算机管理并在左侧边栏中   请转到服务和应用程序下拉菜单并转到WMI   控制。然后查看右侧的栏并单击更多操作   然后是属性。如果你遇到与我相同的错误,你会的   在这看到它。我尝试过“从上次备份恢复”,然后就来了   有一些错误。然后我点击了“立即恢复”......我没有   备份,但我看到备份文件被称为'* .rec文件'。一世   去了Windows搜索并搜索* .rec,它找到了一个   C:\ Windows \ System32 \ wbem。它被称为corrupted.rec所以我没有   抱着很大的希望,似乎想出了同样的东西   消息和以前一样。所以我继续环顾四周,直到我   最终回到WMI控制,看到它不再   显示命名空间错误但我的系统规范。在我看到这个之后   打开了控制笔记本电脑和IT灯的软件   打开。我终于能够把我这该死的令人讨厌的笔记本电脑   关灯。在此之后,我为WMI做了一个备份,现在我将做一个   系统还原点。

答案 2 :(得分:0)

WMI服务正在为我运行,并且我正在使用管理员帐户。

当我使用rsconfig.exe运行命令时,我得到了完全相同的错误和堆栈跟踪,例如

cd C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\

rsconfig.exe -c -s sqlserver\instance -d dbName -a SQL -u user -p pass

我做错了是实例名称具有其自变量 -i ,并对此进行了修复:

rsconfig.exe -c -s sqlserver -i instance -d dbName -a SQL -u user -p pass

要检查预期的参数,请运行:

rsconfig.exe /?

更新

这实际上是不正确的,如果您查看预期的参数,它指出服务器名称也必须包含实例名称,则不能使用引号,并且如果实例名称包含$符号,则可能需要对其进行转义,请参见此处以了解更多信息:https://stackoverflow.com/a/56370766/495455