我使用下面的代码获取唯一的CPU ID,我在网上找到了各种样本。然而。偶然的机会我碰巧拥有2台华硕笔记本电脑。一个是四核i5另一个是重型i7 octocore都是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;
答案 0 :(得分:2)
UUID
对象的Win32_ComputerSystemProduct
属性可能符合您的需求。它应该是每个主板独一无二的,只要制造商首先配置它。无论如何,如果没有主板出现,那么CPU移动并不常见。
答案 1 :(得分:1)
试
ManagementClass managClass = new ManagementClass("win32_processor");
ManagementObjectCollection managCollec = managClass.GetInstances();
foreach (ManagementObject managObj in managCollec)
{
cpuInfo = managObj.Properties["processorID"].Value.ToString();
break;
}
在这里工作正常......
答案 2 :(得分:1)
我得出的结论是,这不是获取唯一ID的好方法。 因此,我没有使用这种方法,而是编写了一段更大的代码,我在其中请求了更多的系统硬件标识符来构建唯一的标识符。
它的方式更好,因为如果我在克隆的硬件上运行它,或者如果硬件发生变化,这种方法甚至会产生不同的数字。有大量的WMI信息,我认为这是人们应该寻找创造独特的东西而不使用ProcessorID的地方。
答案 3 :(得分:1)
虽然有一个明确的机器指令来询问CPU的CPUID,但不能保证返回唯一的ID,因此无论使用哪种方法,几乎都不可能获得通用的唯一CPUID。我们检查了低级程序集例程,并为两个不同的AMD cpu获得相同的id。
答案 4 :(得分:0)
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;
}