#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».