我试图得到一个唯一的CPU ID
本文关键字:一个 唯一 ID CPU | 更新日期: 2023-09-27 18:06:44
我使用下面的代码来获得一个唯一的CPU ID,我在网上找到了使用这个的各种样本。然而。我碰巧有两台华硕笔记本电脑。一个是四核i5,另一个是重型i7十核,都是64位机器。令我惊讶的是,它们都产生了相同的"唯一"CPU ID。
所以这个代码不为我工作,是否有其他方法来获得唯一的CPU id或我做错了什么。我希望得到的是一个特定于每个CPU的数字
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;
也许Win32_ComputerSystemProduct
对象的UUID
属性将满足您的需求。它应该是唯一的每个主板,只要制造商在第一时间配置它。无论如何,CPU在没有主板的情况下移动是不太常见的。
try
ManagementClass managClass = new ManagementClass("win32_processor");
ManagementObjectCollection managCollec = managClass.GetInstances();
foreach (ManagementObject managObj in managCollec)
{
cpuInfo = managObj.Properties["processorID"].Value.ToString();
break;
}
虽然有明确的机器指令要求CPU的CPUID,但这并不能保证返回唯一的ID,因此无论使用哪种方法都几乎不可能获得通用唯一的CPUID。我们检查了低级汇编例程,并为两个不同的AMD cpu获得相同的id。
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;
}
我得出的结论是,这不是获得唯一ID的好方法。因此,我没有使用这种方法,而是编写了一段更大的代码,其中我要求系统的更多硬件标识符来构建唯一标识符。
如果我在克隆的硬件上运行它,或者如果硬件改变了,这个方法甚至会产生不同的数字。这里有很多WMI信息,我认为人们应该在这里寻找创造独特的东西,而不是使用ProcessorID。