C# 如何在C中生成系统(PC/笔记本电脑)硬件唯一ID?

C# 如何在C中生成系统(PC/笔记本电脑)硬件唯一ID?,c#,C#,如何在C中生成系统PC/笔记本电脑硬件唯一ID 请注意:所有系统的配置都相同。您可以使用类和方法: 通常,最可靠的方法之一是查看您是否无法获取网卡的MAC地址。一般来说,这些都是唯一的,除非您还将所有MAC地址配置为相同,否则您将遇到更大的问题:但我支持前面的评论。如果这是为了保护拷贝,不要这样做。当用户更换网卡或退役电脑以使用更新的硬件时,他们会感到沮丧。您可以使用Microsoft Windows SDK工具GUID生成器guidgen.exe以非编程方式生成GUID。此工具有不同的方式来表

如何在C中生成系统PC/笔记本电脑硬件唯一ID

请注意:所有系统的配置都相同。

您可以使用类和方法:


通常,最可靠的方法之一是查看您是否无法获取网卡的MAC地址。一般来说,这些都是唯一的,除非您还将所有MAC地址配置为相同,否则您将遇到更大的问题:但我支持前面的评论。如果这是为了保护拷贝,不要这样做。当用户更换网卡或退役电脑以使用更新的硬件时,他们会感到沮丧。

您可以使用Microsoft Windows SDK工具GUID生成器guidgen.exe以非编程方式生成GUID。此工具有不同的方式来表示生成的GUID,因此您可以在应用程序中进一步使用它


我想,你可以使用处理器和主板id来识别系统,而不是MAC地址,因为它是基于可以更改的外围设备的,因为只有当系统损坏时,它们才会更改,并且在更改时创建一个新系统

Func<string> SystemId = () =>
    {
        ManagementObjectCollection mbsList = null;
        ManagementObjectSearcher mbs = new ManagementObjectSearcher("Select * From Win32_processor");
        mbsList = mbs.Get();
        string id = "";
        foreach (ManagementObject mo in mbsList)
        {
            id = mo["ProcessorID"].ToString();
        }

        ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
        ManagementObjectCollection moc = mos.Get();
        string motherBoard = "";
        foreach (ManagementObject mo in moc)
        {
            motherBoard = (string)mo["SerialNumber"];
        }

        string uniqueSystemId = id + motherBoard;
        return uniqueSystemId;
    };

    Console.WriteLine(SystemId());
即使是处理器也可以更新,这样就可以忽略了+我知道,即使是Microsoft过去也有识别/激活windows的主板id。

。这就是你的拷贝保护机制,对吗?无论如何都不会工作,所以您最好至少保持代码的简单性
Func<string> SystemId = () =>
    {
        ManagementObjectCollection mbsList = null;
        ManagementObjectSearcher mbs = new ManagementObjectSearcher("Select * From Win32_processor");
        mbsList = mbs.Get();
        string id = "";
        foreach (ManagementObject mo in mbsList)
        {
            id = mo["ProcessorID"].ToString();
        }

        ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
        ManagementObjectCollection moc = mos.Get();
        string motherBoard = "";
        foreach (ManagementObject mo in moc)
        {
            motherBoard = (string)mo["SerialNumber"];
        }

        string uniqueSystemId = id + motherBoard;
        return uniqueSystemId;
    };

    Console.WriteLine(SystemId());