Как создать уникальный идентификатор компьютера на Delphi?
Как быстро сгенерировать уникальный идентификатор компьютера для приложения delphi? Раньше я делал это легко с c#, но иногда это не удавалось. Я хочу, чтобы идентификатор был "статическим", но мне все равно, если он изменится из-за изменения оборудования или переустановки ОС, я планировал сохранить его в реестре и проверить его при запуске приложения, а если он изменился, обновить реестр. (Я знаю, как закодировать часть реестра, мне нужна только помощь для уникального идентификатора).
Спасибо.
4 ответа:
Используйте серийный номер жесткого диска или MAC-адрес:
Как получить серийный номер с жесткого диска? Создание уникального идентификатора машины
Взгляните на Сысутилов.CreateGUID, который создает глобальный уникальный идентификатор. Синтаксис:
function CreateGUID(out Guid: TGUID): HResult; stdcall;
Небольшой пример, взятый из справки D2010:
{ This example demonstrates the usage of some GUID related routines along with the type itself. } procedure TForm2.FormCreate(Sender: TObject); var MyGuid0, MyGuid1 : TGUID; begin { Create a new GUID from the string representation. } MyGuid0 := StringToGUID('{00020400-0000-0000-C000-000000000046}'); Memo1.Lines.Add('The GUID is: ' + GUIDToString(MyGuid0)); { Accessing GUID's internal fields Using the Format function to obtain the same output as GUIDToString } Memo1.Lines.Add(Format('GUID using formatting is: ' + '{%0.8X-%0.4X-%0.4X-%0.2X%0.2X-%0.2X%0.2X%0.2X%0.2X%0.2X%0.2X}', [MyGuid0.D1, MyGuid0.D2, MyGuid0.D3, MyGuid0.D4[0], MyGuid0.D4[1], MyGuid0.D4[2], MyGuid0.D4[3], MyGuid0.D4[4], MyGuid0.D4[5], MyGuid0.D4[6], MyGuid0.D4[7]])); { Autogenerate a random GUID at run time. } if CreateGUID(MyGuid1) <> 0 then Memo1.Lines.Add('Creating GUID failed!') else Memo1.Lines.Add('The generated guid is: ' + GUIDToString(MyGuid1)); { Generating second random GUID. } CreateGUID(MyGuid0); { Testing if two guids are equal. } if IsEqualGUID(MyGuid0, MyGuid1) then Memo1.Lines.Add('This cannot happen! CreateGUID guarantees that ' + '2 randomly generated GUIDs cannot be equal!'); end;
HTH
Я не совсем понимаю, о чем ты спрашиваешь? Это может помочь, если вы объясните, зачем вам нужен "уникальный идентификатор компьютера".
Вариант 1
Бит:
" я планировал сохранить его в реестре и проверить его, когда приложение запускается, и если он изменился обновить реестр."
У меня создается впечатление, что вы пытаетесь обнаружить другую (более новую) версию приложения и/или идентифицировать различные приложения в наборе.
Если это так, то просто нажатие
Ctrl+Shift+G
создаст уникальный GUID для вас и вставит его в текущую позицию курсора в коде. Возможно, вы захотите также посмотреть информацию о версии; возможно, номера сборки с автоматическим приращением?Вариант 2
Если вы пытаетесь каким-то образом идентифицировать уникальные установки на разных компьютерах, посмотрите на функциюCreateGUID
в ответе plainth.Вариант 3
Вы упомянули ,что вам " все равно, изменится ли идентификатор из-за изменения оборудования или ОС переустановка". Я не уверен, что это важный факт, например: Вы пытаетесь обнаружить аппаратные изменения ? В конце концов, вы сказали, что вам все равно ; но тогда зачем вообще упоминать об этом?
Вариант 4
Что-то еще, о чем я не подумал?
Вы можете попробовать использовать алгоритм UUID по следующим причинам:
Но будьте осторожны: чтобы достичь аппаратной независимости, вы должны выбрать какой-то алгоритм, который не использует MAC-адрес машины. GUID Microsoft использует его (именно так они обнаружили, кто написал этот вирус LOVE YOU, помните?)
- он независим от аппаратного обеспечения
- это действительно случайность
- он не зависит от платформы.