2010-08-13 97 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