如何使用C#唯一地识别计算机?
如何使用C#(.Net/Mono,本地应用程序)唯一标识计算机(主板) 版本。我们可以使用以下内容在.Net中识别主板(请参阅): 但不幸的是,Mono不支持System.Management。如何在Mono for Linux下实现这一点我不知道:(试试这个: 但就我个人而言,我会选择硬盘序列号。如果主板死亡并被更换,那台电脑将不再有效。如果硬盘驱动器被更换,这并不重要,因为软件就在上面如何使用C#唯一地识别计算机?,c#,.net,mono,C#,.net,Mono,如何使用C#(.Net/Mono,本地应用程序)唯一标识计算机(主板) 版本。我们可以使用以下内容在.Net中识别主板(请参阅): 但不幸的是,Mono不支持System.Management。如何在Mono for Linux下实现这一点我不知道:(试试这个: 但就我个人而言,我会选择硬盘序列号。如果主板死亡并被更换,那台电脑将不再有效。如果硬盘驱动器被更换,这并不重要,因为软件就在上面 当然,另一方面,如果硬盘只是移动到其他地方,信息也会随之移动,因此您可能需要查看序列号的组合,这取决于您
当然,另一方面,如果硬盘只是移动到其他地方,信息也会随之移动,因此您可能需要查看序列号的组合,这取决于您想要它做什么。请参见:编写一个函数,该函数将一些唯一的硬件参数作为输入,并从中生成散列 例如,Windows激活查看以下硬件特征:
- 显示适配器
- SCSI适配器
- IDE适配器(有效地连接主板)
- 网络适配器(NIC)及其MAC地址
- RAM数量范围(即0-64mb、64-128mb等)
- 处理器类型
- 处理器序列号
- 硬盘设备
- 硬盘驱动器卷序列号(VSN)
- CD-ROM/CD-RW/DVD-ROM
您可以选择其中一些来生成您的唯一计算机标识符。网卡的名称如何?您实际上拥有主板ID、CPUID、磁盘序列号和MAC地址,根据经验,它们都不是100% 我们的数据显示
- 磁盘序列丢失0.1%
- MAC缺少1.3%
- 主板ID丢失30%
- CPUID缺少99%
您还应注意,这些函数的调用速度可能非常慢(即使在速度较快的PC上,它们也可能需要几秒钟),因此可能值得尽早在后台线程上启动它们,理想情况下,您不希望阻塞它们。另一方面,您可能希望将它们分开。这将允许例如放入更多内存,并且您可以允许更改,只要更改一次发生一个。生成哈希的好主意。我的mainbo和ards和我的操作系统往往比我的硬盘寿命长。至少到目前为止。有一种称为“备份”的东西可以使OS+软件在即将消亡的硬盘驱动器中生存:-)对我来说,定义计算机的最独特的东西是硬盘驱动器。您将硬盘驱动器带到另一个主板。你认为你的电脑是空的/有一个新的硬盘主板还是有你所有的数据、操作系统等的?也许你是对的。Windows和Linux使用Mono的简单通用方法是获取网卡的MAC地址。我们使用(第一个)网卡的MAC地址(可能不止一个!),对于数百个客户端,这种变化比我们想象的更频繁。我们目前正在寻找替代方案。@史密斯,谢谢您的反馈。请提出另一个同样简单的解决方案。使用WMI获取系统信息(如processorid)是一个简单的解决方案start@Smith这听起来与Mono不兼容,因为WMI是特定于Windows的。
using System.Management;
...
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_MotherboardDevice");
...