我试图得到一个唯一的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;

我试图得到一个唯一的CPU ID

也许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。