我想获得一个独特的CPU ID

我使用下面的代码来获取唯一的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; 

也许Win32_ComputerSystemProduct对象的UUID属性可以满足您的需求。 它应该是每个主板独一无二的,只要制造商首先配置它。 无论如何,如果没有主板出现,那么CPU移动并不常见。

尝试

 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的地方。