如何使用C#(.Net/Mono、本地应用程序)唯一标识计算机(主板)?
版本。我们可以使用类似这样的方法来识别.Net中的主板(请参阅在C#中获取唯一系统标识符):
using System.Management;
...
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_MotherboardDevice");
...
但不幸的是Mono不支持System.Management。 Linux下Mono下如何实现? - 我不知道:(
编写一个函数,将一些唯一的硬件参数作为输入,并根据它们生成哈希值。
例如,Windows 激活会查看以下硬件特征:
您可以选择其中的一些来生成您的唯一计算机标识符。
请参阅:在 C# 中获取唯一系统标识符
您实际上拥有主板 ID、CPUID、磁盘序列号和 MAC 地址,但根据经验,它们都不是 100%。
我们的统计数据显示
0.04% 的测试机器没有产生任何信息,我们甚至无法读取计算机名称。这些可能是某种虚拟 PC、HyperV 或 VMWare 实例,或者可能只是非常锁定?无论如何,您的设计必须能够应对这些情况。
磁盘串行是最可靠的,但易于更改,mac 可以更改,并且根据读取时应用的过滤,如果添加设备驱动程序(hyperv、wireshark 等),它可以更改。
主板和 CPUID 有时会返回无效值“NONE”、“AAAA..”、“XXXX...”等。
您还应该注意,这些函数的调用速度可能非常慢(即使在快速的 PC 上,它们也可能需要几秒钟),因此可能值得尽早在后台线程上启动它们,但理想情况下不要这样做想要阻止他们。
试试这个:
http://carso-owen.blogspot.com/2007/02/how-to-get-my-motherboard-serial-number.html
就我个人而言,我会选择硬盘序列号。如果主板损坏并被更换,那么该电脑就不再有效。如果更换硬盘驱动器,也没有太大关系,因为软件就在上面。
当然,另一方面,如果硬盘刚刚移动到其他地方,信息也会随之而来,因此您可能需要查看序列号的组合,具体取决于您想要它的用途。
网卡的MAC地址怎么样?
您可以使用DeviceId库。 从这里开始
string deviceId = new DeviceIdBuilder()
.AddMachineName()
.AddOsVersion()
.OnWindows(windows => windows
.AddProcessorId()
.AddMotherboardSerialNumber()
.AddSystemDriveSerialNumber())
.ToString();