我想对许可系统使用一些独特的东西。我决定使用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;
}

最佳答案

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

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

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

硬件的各种值的哈希(并且不只是任何哈希,而且冲突很少)就足够了。您可能想要使用系统中已完全嵌入的内容(例如处理器,主板信息),而不是容易拆卸/更改的内容(例如USB驱动器/集线器/等)。

关于c# - WIN32_Processor::Is ProcessorId对于所有计算机都是唯一的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1101772/

10-11 16:20