我想使用一些独特的许可系统.我决定使用Win32_Processor管理类的ProcessorID.
我尝试了两种不同系统,具有相同的处理器类型.
它显示了两个系统的相同处理器ID.我正在使用此代码
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;
}
Run Code Online (Sandbox Code Playgroud)
cas*_*One 17
不,不能保证它是唯一的,因为处理器甚至可能不支持CPUID指令,在这种情况下,无法保证呼叫成功.
此外,您忽略了一台机器可能有多个处理器,因此获取单个处理器的ID无济于事.
正如其他人所指出的那样,如果您想获得系统的唯一ID,最好的办法是创建一个id,它是系统中各种组件ID的混合体.
哈希(不只是有,但一个有很少数碰撞)硬件的各种值的可能就足够了.您可能希望使用系统中相当嵌入的东西,例如处理器,主板信息,但不能轻易分离/更改的东西,例如USB驱动器/集线器/等.
Pau*_*der 10
大多数许可系统依靠多个硬件组件来创建指纹.没有单个组件用作唯一的唯一键.因此,您可以考虑以下因素:
当作为一个整体组合时,您将获得机器的独特表示.当用户在他们的机器上改变某些东西时,当然会有危险.他们失去执照吗?他们有联系你吗?
另请注意,WMI类通常需要管理员权限才能读取您正在寻找的信息类型,这对Vista和Windows 7用户来说是一个真正的麻烦.
做硬件锁定很难做到.所以我建议1.不要这样做或2.购买已经这样做的商业图书馆.
ProcessorID或CPUID用于标识处理器的型号和功能集(ARM,x86/x64).
Pentium III支持处理器序列号(PSN). 除了仅支持Pentium III(以及Transmeta的Efficeon和Crusoe处理器)之外,还必须在BIOS中启用该功能并引发隐私问题.
所以不,ProcessorID并非所有计算机都是唯一的.此外,它很可能在您公司的计算机中不是唯一的(因为许多组织购买同一型号的多台计算机).