【发布时间】:2012-05-11 05:47:05
【问题描述】:
如何在 C# 中生成系统(PC/笔记本电脑)硬件唯一 ID?
请注意:所有系统的配置都是一样的。
【问题讨论】:
-
xkcd.com/221。你的复制保护机制(这是这是关于,对吧?)无论如何都不会起作用,所以你最好至少保持代码简单。
标签: c#
如何在 C# 中生成系统(PC/笔记本电脑)硬件唯一 ID?
请注意:所有系统的配置都是一样的。
【问题讨论】:
标签: c#
我想不是 MAC 地址,因为它基于可以更改的外围设备,您可以使用处理器和主板 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());
甚至可以更新处理器,因此可以忽略 + 我知道甚至微软曾经有主板 ID 来识别/激活窗口。
【讨论】:
通常最可靠的方法之一是查看是否无法获取网卡的 MAC 地址。通常这些是唯一的(除非您还将所有 MAC 地址配置为相同,在这种情况下您将遇到更大的问题 :))但我支持前面的评论。如果这是为了保护版权,请不要这样做。用户在更换网卡或淘汰 PC 以迁移到更新的硬件时会感到沮丧。
【讨论】:
您可以使用“Microsoft Windows SDK” 工具“GUID 生成器” (guidgen.exe) 以非编程方式生成 GUID。此工具有不同的方式来表示生成的 GUID,因此您可以在您的应用程序中进一步使用它。
【讨论】: