7

我以前问过类似的问题,但我现在减少了一些关于我需要什么的限制。

我需要使用 C# 在计算机上高效地找到唯一标识符。它应该在任何特定的计算机上始终保持不变,并且可以是许多因素的组合 - 只要它易于检索。

我曾考虑将 MAC 地址与 WMI 网络查询一起使用,但这太慢了,因为通常有 10 多个适配器。使用 WHERE IPEnabled=true 子句可能会更好,但我认为可能有比这更好的东西。

想法?

(PS不一定要完全独特。只要碰撞的机会很小,就完美了。)

4

4 回答 4

18

首先获取处理器 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

于 2012-04-25T06:33:59.120 回答
2

机器 SID 也很稳定——下面有各种方法可以得到它......

如何使用 WMI 检索 Windows 计算机的 SID?

于 2012-04-25T06:29:31.353 回答
1

非常好的示例,您将在此处看到为计算机生成唯一性

于 2012-04-25T06:30:58.513 回答
1

您可以查看有关 Windows 产品激活的技术公告。从您的评论来看,您可能不想花这么多篇幅,但也许它可以为您提供一些灵感……

WPA 根据以下某些硬件项目的序列号生成哈希:

  • 显示适配器
  • SCSI 适配器
  • IDE 适配器
  • 网络适​​配器(MAC 地址)
  • RAM 数量范围
  • 处理器类型
  • 处理器序列号
  • 硬盘
  • 硬盘卷序列号
  • CD-ROM / CD-RW / DVD-ROM
于 2012-04-25T06:39:39.830 回答