Как вы сказали, CPU Id не будет уникальным, однако вы можете использовать его с другим идентификатором оборудования для создания собственного уникального ключа.
Справочная сборка System.Management
Итак, используйте этот код для получения идентификатора процессора:
string cpuInfo = string.Empty;
ManagementClass mc = new ManagementClass("win32_processor");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
cpuInfo = mo.Properties["processorID"].Value.ToString();
break;
}
Затем используйте этот код, чтобы получить HD ID:
string drive = "C";
ManagementObject dsk = new ManagementObject(
@"win32_logicaldisk.deviceid=""" + drive + @":""");
dsk.Get();
string volumeSerial = dsk["VolumeSerialNumber"].ToString();
Затем вы можете просто объединить эти два сериала, чтобы получить уникальный идентификатор для этой машины:
string uniqueId = cpuInfo + volumeSerial;
Очевидно, что чем больше аппаратных компонентов вы получаете идентификаторы, тем больше становится уникальность. Однако шансы того же компьютера, имеющего идентичный последовательный процессор и жесткий диск, уже невелики.