6

我正在运行以下代码:

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:未找到

调用堆栈:

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()

知道为什么吗?

4

3 回答 3

11

System.Management命名空间提供的功能依赖于WMI(Windows Management Instrumentation)服务。

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

出于故障排除目的,您可以使用“管理工具”→“服务”实用程序进行验证。

如果是这种情况,您可以将代码包装在一个try-catch块中,并使用ServiceController该类来启动和停止相应的服务。

于 2011-03-09T15:06:37.470 回答
3

我们刚刚遇到了同样的问题,并按照下面链接的帖子一步一步地解决了这个问题。

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

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

于 2017-11-24T12:56:42.313 回答
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

于 2019-05-02T01:35:57.503 回答