Исключение "Не найдено" при попытке получить идентификатор процессора через WMI

Я использую этот код для получения идентификатора процессора:

    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";
    }

Я использую 32-битную Windows 7, 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 кажется несколько неработающей, я протестировал ваш код getProcessorId на Windows 7 с включенным UAC, и он работает нормально. Win32_Processor - действительно стандартный класс, который должен быть там.

Вот ссылка, чтобы помочь диагностировать проблемы WMI: Как проверить хранилище WMI перед его восстановлением

Другие вопросы по тегам