尝试通过 WMI 获取 CPU ID 时生成“未找到”异常

Posted

技术标签:

【中文标题】尝试通过 WMI 获取 CPU ID 时生成“未找到”异常【英文标题】:"Not found" exception generated while trying to get CPU ID via WMI 【发布时间】:2011-05-30 20:16:03 【问题描述】:

我正在使用此代码来获取处理器 ID:

    public static string getProcessorId()
    
        var mc = new ManagementClass("Win32_Processor");
        var moc = mc.GetInstances();

        foreach (var mo in moc)
        
            return mo.Properties["ProcessorId"].Value.ToString();
        

        return "Unknown";
    

我正在运行 Windows 7 32 位、Visual Studio 2008。 不幸的是,mc.GetInstances() 方法调用引发了“未找到”异常。

这是一段类似的代码(获取硬盘序列号):

    public static string getVolumeSerialNumber()
    
        var disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
        disk.Get();
        return disk["VolumeSerialNumber"].ToString();
    

此代码也失败 - “disk.Get()”方法引发“无效类”异常。

我已经在关闭和打开 UAC 的情况下运行此代码 - 没有任何帮助。

我做错了什么?

【问题讨论】:

【参考方案1】:

您的 WMI 安装似乎有些损坏,我已经在启用了 UAC 的 Windows 7 上测试了您的 getProcessorId 代码,它工作正常。 “Win32_Processor”是一个非常标准的类,应该存在。

这是帮助诊断 WMI 问题的链接:How to check the WMI repository before rebuilding it

【讨论】:

谢谢!它现在可以工作了。我必须通过“winmgmt /resetrepository”命令重置 WMI 存储库。

以上是关于尝试通过 WMI 获取 CPU ID 时生成“未找到”异常的主要内容,如果未能解决你的问题,请参考以下文章

如何列出多核处理器(使用 WMI)中的所有 CPU ID?

WMI 如何获取 ProcessorId?

Prometheus无法获取Windows的CPU数据解决方法

VC能否获取所有硬件信息,现只获得CPU的信息,其他的都不行

c# WMI获取机器硬件信息(硬盘,cpu,内存等)

远程 WMI 查询慢