【问题标题】:ManagementObjectSearcher throws FileNotFoundException when iterating its objects in foreach loopManagementObjectSearcher 在 foreach 循环中迭代其对象时抛出 FileNotFoundException
【发布时间】:2012-02-25 13:00:57
【问题描述】:

我尝试通过 System.Management 命名空间的多个类获取一些系统信息,但任何尝试使用 ManagementObjectSearcherManagementObjectCollection 集合项的结果在 FileNotFoundException 中。

下面我介绍有问题的代码:

    public static string GetProcessorID() {
        var processorID = "";
        var query = "SELECT ProcessorId FROM Win32_Processor";
        var oManagementObjectSearcher = new ManagementObjectSearcher(query);

        foreach (var oManagementObject in oManagementObjectSearcher.Get()) {
            processorID = (string)oManagementObject["ProcessorId"];
            break;
        }

        return processorID;
    }

尝试从集合中获取下一项时,'foreach' 行中抛出异常。

在装有 windows xp Professional sp3visual studio 2008 Professional 的机器上观察到。我想这可能是我的 cpu 的问题,它是 intel dual core - 其他具有类似环境的机器上的相同程序可以完美运行。这些机器之间的主要区别是cpu。

MACAddress 和 SystemDrive 等其他参数也出现了同样的问题,这表明它可能是软件问题(WMI?)

这里描述了非常相似的问题 -> http://news.softpedia.com/news/XP-SP3-Win32-Processor-Class-Labels-Intel-Core-2-Duo-CPUs-Incorectly-90201.shtml 但解决方案没有解决它。

有什么想法吗?提前致谢。

大卫

【问题讨论】:

  • 这没什么意义。当你的循环包含一个 break 语句时,你怎么能从集合中获取下一个项目?
  • 对。不是下一个,而是第一个。调试时它停止在“in”关键字上。所以我拿不到任何东西。
  • 没有解决您的问题,但无论如何:您是否意识到代码不太适合多核、超线程或多处理器机器?所有这些都会为查询生成多行。
  • @dawid,你解决过这个问题吗?
  • @Eric:不,很遗憾不是。我只是将它包装在一个 try-catch 语句中,这不是解决方案,但在我的情况下,这是处理问题的唯一合理方法。

标签: c# visual-studio-2008 filenotfoundexception windows-xp-sp3


【解决方案1】:

我知道我的回答有点晚了,但是因为这是我搜索错误时谷歌上的第一次点击,所以我想我放了一个指向为我解决它的主题的链接。

System.Management.ManagementException: Not found

基本上你要做的就是用 WMI 解决你的错误。

【讨论】:

    【解决方案2】:

    我也有同样的问题。 它不会在 'in word 上崩溃,而是在

    oManagementObjectSearcher.Get().
    

    检查堆栈跟踪:

    System.IO.FileNotFoundException - Nie można odnaleźć określonego modułu. (Wyjątek od HRESULT: 0x8007007E)
        Stack trace:
    w System.Management.ThreadDispatch.Start()
       w System.Management.ManagementScope.Initialize()
       w System.Management.ManagementObjectSearcher.Initialize()
       w System.Management.ManagementObjectSearcher.Get()
    [...]
    

    当我移动到我的电脑/右键单击/管理/服务/WMI 配置/右键单击/属性时 -> 我收到消息“Win32:找不到模块”出现错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多