2009-07-09 150 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对于所有计算机都不是唯一的。此外,您的公司中的计算机很可能不是唯一的(因为许多组织购买同一型号的多台计算机)。

相关问题