我们有一个.NET应用程序,它使用WMI在整个网络中的机器上收集大量信息,例如读取Win32_NTLogEvent以查看Symantec Antivirus是否已编写任何内容。查询工作正常,但在重复运行WMI查询“通用失败”后,错误将开始回归。大约在这之后非常一致地发生125个电话。重新启动我们正在运行WMI查询的计算机,始终修复错误...直到运行下125个查询。

看来存储库很好,我们无法找到任何日志文件大小问题。

更多信息 - 收到错误后找到WMIDiag并找到 -

25607 13:55:38(1)!!错误:报告WMI ENUMERATION操作错误:2 ERROR(S)!

25608 13:55:38(0)** - ROOT / CIMV2,SubClassesOf,'*',0x80041006 - (WBEM_E_OUT_OF_MEMORY)操作内存不足。

25609 13:55:38(0)** MOF注册:'C:\ WINNT \ SYSTEM32 \ WBEM \ SNMPREG.MOF “ 25610 13:55:38(0)** - Root / CIMv2,InstancesOf,'Win32_PerfFormattedData_PerfProc_Thread',0x8007000E - 没有足够的存储空间来完成此操作..

25611 13:55:38(0)** MOF注册:'C:\ WINDOWS \ SYSTEM32 \ WBEM \ WMI.MOF'

有人见过这个吗?想法?

有帮助吗?

解决方案 2

我相信我们已经找到了这个问题。为了简化我们的一些查询,我们在where子句中添加了类似1 = 1的内容,以简化查询的构建。删除了constant = constant,我正在测试的一个查询从40秒到.4秒,并且运行了10,000次而没有产生一般性故障(WBEM_E_OUT_OF_MEMORY)。

其他提示

我们看到了“通用故障”使用不同的WMI查询错误很多次,我们基本上得出的结论是WMI不够稳定,不能用于原始管理以外的任何事情。经过数月的混乱之后,我们唯一的解决方案是拉出所有WMI调用并在纯API调用中找到替换。它们总会工作一段时间,然后失败并显示“Generic Error”。 (我知道这不是一个答案,但这是一个共享的经验,如果有人有答案,我会很高兴听到它。)

Windows远程管理(WinRM)可以克服所有这些问题。 WinRM是WS-Management Protocol的Microsoft实现,WS-Management Protocol是一种基于标准的简单对象访问协议(SOAP)。

尝试通过WMI在远程计算机上卸载/安装软件时,我遇到了类似的问题。

问题出现在目标计算机上存在漫游配置文件的位置。这可能是因为已经在目标机器上查询了WMI。

我不知道这是否是同一个问题,但在我尝试卸载软件之前,我必须检查一下是否在我的配置文件位于目标计算机上的Documents and Settings文件夹中。

我假设当您运行查询时,它会在本地计算机上创建您的配置文件。

每当我尝试在我之前使用过remotley的机器上卸载软件时,我都收到了Generic Failure消息。

现在我确保在尝试卸载/安装软件组件remotley之前,我的配置文件已从目标计算机中删除。从那以后我没有遇到任何问题。

希望这对任何人都有帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top