2010-08-13 62 views
24

我正在寻找一种方法来获得独特的计算机ID。根据this post我不能使用处理器ID来达到此目的。我可以带主板ID吗?识别计算机的最佳方式是什么?
谢谢你的帮助!独特的计算机ID

+1

这与C#无关。 – 2010-08-13 07:57:21

+12

有人会认为(当我回答编程问题时,我很欣赏),一旦通用机制被识别出来,C#中的特定实现就会被期望... – Murph 2010-08-13 07:59:36

+0

我应该为这个问题使用什么标签? – StuffHappens 2010-08-13 08:02:13

回答

32

正如你所说的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; 
} 

然后使用此代码来获取HD 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序列和硬盘序列的同一台机器的机会已经很少。

+0

正如我之前所说的处理器ID不合适。 – StuffHappens 2010-08-13 08:05:51

+0

@StuffHappens - 更新了答案。 – GenericTypeTea 2010-08-13 08:09:17

+0

我明白你的观点。我只是怀疑如果有一个RAID,我会得到什么,并且有两个不同的硬盘与磁盘C在他们身上。 – StuffHappens 2010-08-13 08:20:40

2

主板ID是一个非常独特的标识符。另一种选择是使用网卡MAC地址,这非常独特。

+2

但应该注意的是,MAC可以从NIC属性窗口更改为很多NIC,而主板ID很难更改。 – ErikHeemskerk 2010-08-13 07:59:38

+0

据我所知你可以改变你的mac地址。如果有多个网板(或者我应该如何命名),该怎么办? – StuffHappens 2010-08-13 08:01:08

+0

这是正确的。主板ID更独特。但是,如果您不需要非常强大的唯一性(即可以假设MAC不会更改),则获取mac地址要容易得多。 @Stuff,一起散列地址? :) – 2010-08-13 09:32:09

2

网卡的MAC地址? Windows操作系统安装的安全标识符(SID)? (假设它是你正在处理的窗口) 你能为每台PC生成一个GUID吗?

你究竟想达到什么目的?

+0

+1仅用于生成GUID:P – cwap 2010-08-13 08:10:46

+2

如果他正在尝试为授权机制执行此操作,则可以非常轻松地更改SID和MAC地址,因此不会被接受。 – GenericTypeTea 2010-08-13 08:15:34