Я пытаюсь получить уникальный идентификатор процессора
Я использую код ниже, чтобы получить уникальный идентификатор процессора, я нашел различные примеры в Интернете, используя это. Тем не мение. Случайно у меня есть 2 ноутбука Asus. Один - четырехъядерный процессор i5, другой - сверхпрочный i7 octocore, оба - 64-битные машины. К моему большому удивлению, они оба выдают один и тот же "уникальный" идентификатор процессора???
Так что этот код не работает для меня, есть ли другие способы получить уникальные идентификаторы процессора или я делаю что-то не так здесь. Я надеюсь получить число, специфичное для каждого процессора
string cpuID = string.Empty;
ManagementClass mc = new ManagementClass("win32_processor");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if (cpuID == "")
{
//Remark gets only the first CPU ID
cpuID = mo.Properties["processorID"].Value.ToString();
}
}
return cpuID;
5 ответов
Я пришел к выводу, что это не очень хороший способ получить уникальные идентификаторы. Поэтому вместо этого метода я написал гораздо больший фрагмент кода, в котором я запросил гораздо больше аппаратных идентификаторов системы для создания уникального идентификатора.
Это лучше, так как этот метод будет даже производить разные числа, если я запусту его на клонированном оборудовании или если аппаратное обеспечение будет изменено. Вокруг много информации о WMI, и я думаю, что именно здесь люди должны искать что-то уникальное, а не использовать ProcessorID.
Может быть UUID
собственность Win32_ComputerSystemProduct
Объект подойдет вашим потребностям. Предполагается, что она будет уникальной для каждой материнской платы, если ее настраивает производитель. В любом случае, процессор не слишком часто перемещается без материнской платы.
Пытаться
ManagementClass managClass = new ManagementClass("win32_processor");
ManagementObjectCollection managCollec = managClass.GetInstances();
foreach (ManagementObject managObj in managCollec)
{
cpuInfo = managObj.Properties["processorID"].Value.ToString();
break;
}
работает нормально здесь...
Хотя существует четкая машинная инструкция, запрашивающая CPUID у CPU, это не гарантирует возврата уникального идентификатора, поэтому практически невозможно получить универсальный уникальный CPUID независимо от того, какой метод вы используете. Мы исследовали процедуры сборки на низком уровне и получили одинаковый идентификатор для двух разных процессоров AMD.
var mbs = new ManagementObjectSearcher("Select ProcessorID From Win32_processor");
var mbsList = mbs.Get();
foreach (ManagementObject mo in mbsList)
{
cpuid = mo["ProcessorID"].ToString();
textBox1.Text=cpuid;
}
Взгляните на этот пост: x86 / x64 CPUID в C#
И этот из моих Закладок: попытка перенести CPUID в C#