本问题已经有最佳答案,请猛点这里访问。
之前我曾问过类似的问题,但现在我减少了一些有关我所需要的限制。
我需要使用C#在计算机上高效地找到唯一标识符。 只要易于检索,它在任何特定计算机上都应始终保持不变,并且可以是许多因素的综合。
我曾考虑过将MAC地址用于WMI网络查询,但这太慢了,因为通常有10多个适配器。 使用WHERE IPEnabled = true子句可能会更好,但我认为可能要比这更好。
有想法吗?
(P.S.不一定完全是唯一的。只要碰撞的机会很小,那就是完美的。)
您是否要为计算机添加指纹或生成随机数?
请看以下答案:stackoverflow.com/a/3474966/754042,建议使用CPU ID + HDD ID作为相当可靠的唯一计算机标识符。
首先获取处理器ID,如下所示:(添加对System.Management的引用)
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"];
}
您可以合并以上两个并获得唯一的ID
string myUniqueID = id + motherBoard;
Console.WriteLine(myUniqueID);
还要查看此链接查找计算机的硬件ID,CPU ID,主板ID,硬盘ID
主板序列号的问题是在WMI中很少填充。
@CJxD,在这种情况下,您也可以获取硬盘驱动器的ID,然后根据这三个值创建一个唯一的ID,它并不是100%唯一的,但在大多数情况下都可以使用
@CJxD,检查一下,codeproject.com/Articles/28678/他正在使用BIOS + MotherBoard + Processor,看起来还不错
机器SID也很稳定-可以通过以下多种方式来达到此目的...
如何使用WMI检索Windows计算机SID?
新安装的Windows是否会更改计算机SID?即它是特定于操作系统实例还是基于硬件?
每次安装Windows时生成。只要您可以接受可篡改的可变软件,MAC地址等硬件ID便可以使用。真正的"主板" ID是唯一的行业标准不变硬件ID是TPM,您可能已经安装了该设备。仍然不是那么普遍。
您可以在Windows产品激活上查看此技术公告。从您的评论来看,您可能不想花那么多篇幅,但也许可以为您提供一些启发...
WPA根据以下某些硬件项目的序列号生成哈希:
显示适配器
SCSI适配器
IDE适配器
网络适??配器(MAC地址)
RAM数量范围
处理器类型
处理器序列号
硬盘
硬盘卷序列号
CD–ROM / CD-RW / DVD-ROM
提到的链接不再起作用。改用它:technet.microsoft.com/en-us/library/bb457054.aspx
@JustShadow固定!
真正的好例子,您将在这里看到生成唯一计算机的信息