Как создать уникальный идентификатор компьютера на Delphi?
Как быстро создать уникальный идентификатор компьютера для приложения delphi? Раньше я делал это легко с c#, но иногда это не удавалось. Я хочу, чтобы идентификатор был "статическим", но мне все равно, изменяется ли идентификатор из-за изменения оборудования или переустановки ОС, я планировал сохранить его в реестре и проверить его при запуске приложения, и если он изменил обновление реестра. (Я знаю, как кодировать часть реестра, мне нужна помощь только для уникального идентификатора).
спасибо.
4 ответов
использовать серийный номер жесткого диска или MAC-адрес:
как получить серийный номер жесткого диска? создание уникального идентификатора машины
посмотрите на 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;
HTH
Я не совсем уверен, что вы спрашиваете? Это может помочь, если вы пояснили, почему вам нужен "уникальный идентификатор компьютера".
1бит:
" Я планировал сохранить его в реестре и проверить его при запуске приложения, и если он изменил обновление реестра."
создает впечатление, что вы пытаетесь обнаружить другую (более новую) версию приложения и / или определить различные приложения в комплект.
Если это так, то просто нажав Ctrl+Shift+G
создаст для вас уникальный идентификатор GUID и вставит его в текущую позицию курсора в коде.
Возможно, вы захотите также посмотреть информацию о версии; возможно, номера сборки с автоматическим приращением?
Если вы пытаетесь каким-то образом определить уникальные установки на разных компьютерах, взгляните на CreateGUID
функция в ответе plainth.
вы упоминалось, что вам "все равно, изменится ли идентификатор из-за изменения оборудования или переустановки ОС". Я не уверен, что это важный факт, как:вы пытаетесь обнаружить аппаратные изменения? Ведь вы говорили, что не важно; но тогда зачем вообще об этом упоминать?
4что-то еще я не учел?
вы можете попробовать использовать алгоритм UUID по следующим причинам:
- он индепендирует оборудование
- Это действительно случайный
- это независимая платформа.
но будьте осторожны: для достижения аппаратной независимости вы должны выбрать какой-то алгоритм, который не использует MAC-адрес машины. GUID Microsoft использует его (так они обнаружили, кто написал вирус LOVE YOU, помните?)