2009-07-09 235 views
11

我想使用許可系統特有的一些東西。我決定使用Win32_Processor管理類中的ProcessorID。WIN32_Processor ::是ProcessorId對於所有計算機都是唯一的

我嘗試了兩種不同的系統使用相同的處理器類型..

它顯示了我兩個系統相同processorID。我使用這個代碼

public static String GetCPUId() 
{ 
    String processorID = ""; 

    ManagementObjectSearcher searcher = new ManagementObjectSearcher(
     "Select * FROM WIN32_Processor"); 

    ManagementObjectCollection mObject = searcher.Get(); 

    foreach (ManagementObject obj in mObject) 
    { 
     processorID = obj["ProcessorId"].ToString(); 
    } 

    return processorID; 
} 
+0

我有同樣的問題,但看起來像沒有答案。經過這麼多年,你找到了答案嗎? – qakmak 2015-04-25 15:03:54

回答

16

不,它不能保證,這將是獨一無二的,因爲處理器甚至可能不支持CPUID指令,在這種情況下,呼叫不能保證成功。另外,你忽略了一臺機器可能具有多個處理器,因此獲取單個處理器的ID不會有幫助。


正如其他人所指出的,如果你想獲得對系統的唯一的ID,你最好的選擇是創建一個id這是系統上的各種組件ID的汞合金。

散列(而不是隨便什麼,但一個有非常少數碰撞)的硬件可能足矣的各種值。你可能想要使用相當嵌入系統的東西,比如處理器,主板信息,但不能輕易拆卸/更改的東西,比如USB驅動器/集線器等。

+7

那我該怎麼辦?我可以從系統獲得哪些獨特的東西? – Mohsan 2009-07-09 04:05:49

1

對於您正在尋找的唯一字符串,我們使用MAC地址。如果用戶沒有MAC address,我們只允許多次安裝。它涵蓋了大部分我們想要完成的案例。

+4

MAC地址很容易被欺騙。不是一個好主意。 – jyz 2013-07-05 02:21:02

+0

@jyz這取決於你想要的ID是多麼獨特。如果您的付費用戶不會遇到服務中斷,那麼您的軟件的一些盜版行爲可能是可以接受的。 – pyskell 2017-05-03 18:46:02

10

大多數授權系統依靠多個硬件組件來創建指紋。沒有單個組件被用作唯一的唯一鍵。所以,你可能會採取以下考慮:

  • 所有網絡適配器的MAC地址(可能很麻煩,如果他們有一個塢站或啓用/禁用其在筆記本電腦上無線)
  • CPUID
  • 主板部件零件號(如IDE或SCSI控制器)
  • 系統驅動器的序列號(NOT卷ID,其很容易改變)

作爲一個整體進行組合時,您將獲得該機器的唯一表示。當用戶改變他們機器上的某些東西時,危險就會發生。他們是否失去執照?他們是否有聯繫你?

另請注意,WMI類通常需要管理員權限才能閱讀您正在尋找的信息,這對Windows 7用戶來說是一個真正的麻煩。

做硬件鎖定是非常困難的。所以我會建議1.不要這樣做,或2.購買已經這樣做的商業圖書館。

6

ProcessorID或CPUID用於標識處理器的型號和功能集(ARM,x86/x64)。

奔騰III支持處理器序列號(PSN)。 In addition to only being supported on the Pentium III (and Transmeta's Efficeon and Crusoe processors)feature had to be enabled in BIOS and raised privacy concerns

因此不,ProcessorID對於所有計算機都不是唯一的。此外,您的公司中的計算機很可能不是唯一的(因爲許多組織購買同一型號的多臺計算機)。

相關問題