唯一计算机ID

32

我正在寻找获取唯一计算机ID的方法。

根据这篇帖子的说法,我无法使用处理器ID来达到此目的。我可以使用主板ID吗?有什么最好的方法来确定计算机的唯一性?


1
这与 C# 无关。 - Daniel Goldberg
14
当回答编程问题时,有些人可能会贸然地认为一旦识别出一个通用机制,就会需要用 C# 来实现它... - Murph
这个问题应该使用什么标签? - StuffHappens
1
可能重复:https://dev59.com/RHA75IYBdhLWcg3wKlqM#3443148 - schoetbi
如果您想要在C#中获取唯一计算机ID的示例,您应该使用C#标记...我猜这就是您想要的,对吗? - djdd87
@djdd87:提问者确实使用了[tag:c#]标签,但是一些没有阅读标签维基的其他用户错误地应用了[tag:system-identification]。 - Ben Voigt
3个回答

38

就像你说的,CPU ID 不会是唯一的,但你可以将其与另一个硬件标识符一起使用来创建自己的唯一键。

参考程序集System.Management

因此,使用以下代码获取 CPU ID:

string cpuInfo = string.Empty;
ManagementClass mc = new ManagementClass("win32_processor");
ManagementObjectCollection moc = mc.GetInstances();

foreach (ManagementObject mo in moc)
{
     cpuInfo = mo.Properties["processorID"].Value.ToString();
     break;
}
然后使用这段代码获取硬盘ID:
string drive = "C";
ManagementObject dsk = new ManagementObject(
    @"win32_logicaldisk.deviceid=""" + drive + @":""");
dsk.Get();
string volumeSerial = dsk["VolumeSerialNumber"].ToString();

然后,您只需将这两个序列组合起来,就可以获得该机器的唯一ID:

string uniqueId = cpuInfo + volumeSerial;

显然,你获取的硬件组件的ID越多,唯一性就越大。然而,同一台机器拥有相同CPU序列号和硬盘序列号的机率已经微乎其微。


就我个人而言,我使用处理器 ID 和磁盘序列号(带有备用方案)构建了一个唯一的 ID 生成器,但它在我们从戴尔同时购买的一对机器上失败了。 - Thomas
我需要在通过ClickOnce发布的应用程序中使用类似这样的东西。我的最终用户可能对他们的PC有相当受限的访问权限。如果最终用户不是机器上的管理员,这种方法会引起任何问题吗?这是否适用于XP/7/8?谢谢。我真的需要为我的项目派生一个唯一的本地密钥。 - RLH
@GenericTypeTea 我遇到了一个错误:尝试使用安全透明方法“demo.Program.demo()”访问安全关键方法“System.Management.ManagementClass..ctor(System.String)”失败。 - Vishal
10
这并不会产生唯一的标识符。我们已经在购买自戴尔的15台机器上测试过了,但已经发现有3个ID相同。 - Stefan
1
也许可以尝试更多的组件,就像答案所说的那样? - djdd87
显示剩余4条评论

5

网络适配器的MAC地址? Windows操作系统安装的安全标识符(SID)?(假设你正在处理的是Windows系统) 你能为每台电脑生成一个GUID吗?

您到底想实现什么目标?


3
如果他试图为许可机制做这件事,那么SIDs和MAC地址可以很容易地更改,因此不可接受。 - djdd87

4

主板ID是一个非常独特的标识符。另一个选项是使用网络卡的MAC地址,这几乎是唯一的。


6
需要注意的是,对于许多网卡来说,MAC地址可以在网卡属性窗口中更改,而主板ID则更难更改。 - ErikHeemskerk
据我所知,您可以更改您的MAC地址。如果有多个网卡(或者我应该如何称呼它),该怎么办? - StuffHappens
1
这是正确的。主板ID更加独特。然而,如果您不需要非常强的唯一性(即您可以假设MAC地址不会改变),获取MAC地址要容易得多。@Stuff,把地址哈希在一起? :) - Daniel Goldberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接