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

#c# #wmi #serial-number #hdd #cpuid

#c# #wmi #серийный номер #жесткий диск #cpuid

Вопрос:

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

     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 перед его перестройкой

Комментарии:

1. Спасибо! Теперь это работает.. Мне пришлось сбросить репозиторий WMI с помощью команды «winmgmt /resetrepository».