一尘不染

WIN32_Processor :: Is ProcessorId对于所有计算机都是唯一的

c#

我想对许可系统使用一些独特的东西。我决定使用Win32_Processor Management类中的ProcessorID。

我在具有相同处理器类型的两个不同系统上进行了尝试。

它显示两个系统的相同ProcessorID。我正在使用此代码

public static String GetCPUId()
{
    String processorID = "";

    ManagementObjectSearcher searcher = new ManagementObjectSearcher(
        "Select * FROM WIN32_Processor");

    ManagementObjectCollection mObject = searcher.Get();

    foreach (ManagementObject obj in mObject)
    {
        processorID = obj["ProcessorId"].ToString();
    }

    return processorID;
}

阅读 756

收藏
2020-05-19

共1个答案

一尘不染

不,不能保证它是唯一的,因为处理器甚至可能不支持CPUID指令,在这种情况下,不能保证调用成功。

另外,您还忽略了一台计算机中可能有多个处理器的情况,因此获取单个处理器的ID并没有帮助。


正如其他人指出的那样,如果要获取系统的唯一ID,最好的选择是创建一个ID,该ID是系统上各种组件ID的混合物。

(有,不是任何,但一个散列 十分 硬件的各种值的一些冲突) 可能
就足够了。您可能想要使用系统中已完全嵌入的内容,例如处理器,主板信息,而不是容易拆卸/更改的内容,例如USB驱动器/集线器/等。

2020-05-19