0

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

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

更多信息 - 得到错误后运行 WMIDiag 并发现 -

25607 13:55:38 (1)!!错误:WMI 枚举操作错误报告:2 错误!

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'

有人见过这个吗?想法?

4

4 回答 4

4

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

于 2008-10-15T15:22:13.457 回答
2

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

于 2008-10-22T14:53:23.230 回答
0

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

于 2010-07-13T07:51:10.183 回答
0

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

当您的漫游配置文件出现在目标机器上时,就会出现问题。这可能是由于之前已在目标计算机上查询过 WMI。

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

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

每当我尝试在我以前在远程工作过的机器上卸载软件时,我都会收到一条通用故障消息。

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

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

于 2012-04-11T09:30:18.823 回答