7

可能重复:
WIN32_Processor::Is ProcessorId 对所有计算机都是唯一的

我正在创建一个具有试用功能的应用程序。为了检测某个用户是否已经使用了试用版,应用程序使用他们的machineHash.

machineHash函数如下所示:

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

foreach (ManagementObject mo in moc)
{
    if (cpuInfo == "")
    {
        //Get only the first CPU's ID
        cpuInfo = mo.Properties["processorID"].Value.ToString();
        break;
    }
}
return cpuInfo;

但是,它确实将我的处理器 ID 报告为BFEBFBFF000206A7(在两台不同的英特尔机器上,i5 和赛扬)。谷歌搜索BFEBFBFF000206A7也有命中,所以它不是唯一的。

谁能告诉我为什么这不是独一无二的?我不想使用比方说C:\驱动器的 VolumeSerial,因为它可以通过简单的命令轻松更改。

4

1 回答 1

8

不使用处理器 ID,而是将系统的多个 ID 组合成 1 个字符串,以在程序每次发送检查时进行比较。

使用这样的东西:

using System.Management;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(
"select * from " + whatever_id);

您可以在此处找到可以替换whatever_id 的所有值:http: //www.codeproject.com/Articles/17973/How-To-Get-Hardware-Information-CPU-ID-MainBoard-I

我会找到一些你想使用的,其中一些可能是唯一的,但即使你不使用唯一的字段,你也可以进行组合,对于大多数意图和目的来说,都是唯一的。

于 2012-12-24T17:15:02.443 回答