2013-03-30 81 views
1

我正在使用下面的代碼來獲得一個唯一的CPU ID,我發現在網上使用它的各種示例。然而。偶然我碰巧擁有2個華碩筆記本電腦。一個是四核i5,另一個是重型i7 octocore,都是64位機器。 令我非常吃驚的是,它們都產生了相同的「獨特」CPU ID ???。我想獲得一個唯一的CPU ID

所以這段代碼沒有爲我工作,有沒有其他方法來獲得唯一的CPU ID或我在這裏做錯了什麼。我希望得到的是一個數字,具體該由

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

foreach (ManagementObject mo in moc) 
{ 
if (cpuID == "") 
{ 
     //Remark gets only the first CPU ID 
     cpuID = mo.Properties["processorID"].Value.ToString(); 

} 
} 
return cpuID; 
+2

自從Pentium III以來,這是不可能的。他們出於隱私原因取出了該功能。 – Mysticial

+1

更多的信息在這裏:http://en.wikipedia.org/wiki/Pentium_III#Controversy_about_privacy_issues – Mysticial

回答

0

我得出的結論是,這只是不是一個很好的方法來獲得唯一的ID。 所以不是這種方法,我寫了一段更大的代碼,在這段代碼中我請求了更多系統的硬件標識符來構建唯一的標識符。

它的方式更好,因爲如果我在克隆的硬件上運行它,或者硬件發生變化,該方法甚至會產生不同的數字。有很多WMI信息,我認爲這是人們應該尋找創造獨特而不使用ProcessorID的地方。

+2

那麼你用什麼鍵來建立你的唯一ID?如果我更換硬盤或其他像大多數人可能更改的GPU一樣的組件,我並不想讓ID發生變化。 – Marv

1

嘗試

ManagementClass managClass = new ManagementClass("win32_processor"); 
ManagementObjectCollection managCollec = managClass.GetInstances(); 

foreach (ManagementObject managObj in managCollec) 
{ 
    cpuInfo = managObj.Properties["processorID"].Value.ToString(); 
    break; 
} 

工作在這裏很好...

+1

這是我使用的相同的代碼,它不提供唯一的ID 我得到了兩個不同的華碩筆記本電腦,它會導致相同的字符串。 – user613326

+0

奇怪的是,代碼正在爲我工​​作,我測試過4個電腦,每次我得到一個獨特的processorid? – DeMama

+1

我也很驚訝也許不是所有的製造商都以同樣的方式使用這個,我的機器都是華碩,奔騰i5和i7在另一個品牌上使用,它給了我不同數量的麪糰。 它只是告訴我,它不是唯一的,也許它更像是一個系列號碼或品牌號碼?我不知道 – user613326

1

雖然有一個清楚的機器指令來詢問CPU的CPUID,但不能保證返回一個唯一的ID,因此無論使用哪種方法都無法獲得通用的唯一CPUID。我們檢查了低級彙編程序,併爲兩個不同的AMD CPU獲取相同的ID。

2

也許Win32_ComputerSystemProduct對象的UUID屬性將滿足您的需求。它應該是唯一的每個主板,只要製造商首先配置它。無論如何,如果沒有主板出現在CPU上,CPU並不常見。

0
var mbs = new ManagementObjectSearcher("Select ProcessorID From Win32_processor"); 
    var mbsList = mbs.Get(); 

    foreach (ManagementObject mo in mbsList) 
    { 
     cpuid = mo["ProcessorID"].ToString(); 
     textBox1.Text=cpuid; 
    }