Как создать уникальный идентификатор компьютера на Delphi? - PullRequest
6 голосов
/ 05 декабря 2009

Как быстро создать уникальный идентификатор компьютера для приложения Delphi? Раньше я делал это легко с помощью c #, но иногда это не удавалось. Я хочу, чтобы идентификатор был «статическим», но мне все равно, меняется ли идентификатор из-за смены аппаратного обеспечения или переустановки ОС, я планировал сохранить его в реестре и проверить его при запуске приложения и при его изменении. обновить реестр. (Я знаю, как кодировать часть реестра, мне нужна помощь только для уникального идентификатора).

Спасибо.

Ответы [ 4 ]

6 голосов
/ 06 декабря 2009
4 голосов
/ 05 декабря 2009

Посмотрите на SysUtils.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;

НТН

2 голосов
/ 05 декабря 2009

Я не совсем уверен, о чем ты спрашиваешь? Это может помочь, если вы пояснили, зачем вам нужен «уникальный идентификатор компьютера».

Вариант 1

Бит:

"Я планировал сохранить его в реестре и проверить его при запуске приложения и, если оно изменилось, обновить реестр."

создает впечатление, что вы пытаетесь обнаружить другую (более новую) версию приложения и / или идентифицировать различные приложения в комплекте.

Если это так, то простое нажатие Ctrl+Shift+G сгенерирует уникальный GUID для вас и вставит его в вашу текущую позицию курсора в коде. Вы также можете посмотреть информацию о версии; возможно автоматическое увеличение числа сборки?

Вариант 2

Если вы пытаетесь каким-то образом идентифицировать уникальные установки на разных компьютерах, взгляните на функцию CreateGUID в ответе пользователя.

Вариант 3

Вы упомянули, что вам "все равно, если идентификатор меняется из-за смены оборудования или переустановки ОС". Я не уверен, если это важный факт, например: вы пытаетесь обнаружить аппаратные изменения ? В конце концов, вы сказали, что не волнует ; но зачем вообще об этом упоминать?

Вариант 4

Что-то еще, что я не учел?

0 голосов
/ 05 декабря 2009

Вы можете попробовать использовать алгоритм UUID по следующим причинам:

  • Это зависит от оборудования
  • Это действительно случайно
  • Это не зависит от платформы.

Но будьте осторожны: для достижения аппаратной независимости вы должны выбрать какой-то алгоритм, который не использует MAC-адрес машины. GUID от Microsoft использует его (именно так они обнаружили, кто написал этот вирус LOVE YOU, помнишь?)

...