【问题标题】:WMI - Generic FailureWMI - 一般故障
【发布时间】:2008-10-15 14:40:15
【问题描述】:

我们有一个 .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'

有人见过这个吗?想法?

【问题讨论】:

    标签: .net wmi


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          问题出现在目标计算机上存在漫游配置文件的位置。这可能是由于之前已在目标计算机上查询过 WMI。

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

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

          每当我尝试在我以前使用过 remotley 的机器上卸载软件时,我都会收到一条一般故障消息。

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-08
            • 2013-06-01
            • 2015-02-12
            • 2023-03-21
            • 1970-01-01
            相关资源
            最近更新 更多