Pergunta

Como posso rapidamente gerar um ID de computador exclusivo para uma aplicação Delphi? Eu costumava fazer isso easly com c #, mas este falhou algumas vezes. Eu quero que o ID para ser "estático", mas eu não me importo se as mudanças id por causa de uma alteração de hardware ou reinstalação do sistema operacional, eu estava planejando para armazená-lo no registro e verificá-lo quando o aplicativo é iniciado, e se mudou atualizar o registro. (Eu sei como codificar a parte de registro, eu só preciso de ajuda para a identificação única).

Graças.

Foi útil?

Solução

Use o número de série do disco rígido ou o endereço MAC:

Como obter o número de série de discos rígidos? Gerando um único ID de máquina

Outras dicas

Tenha um olhar em SysUtils.CreateGUID que cria um identificador exclusivo. Sintaxe:

function CreateGUID(out Guid: TGUID): HResult; stdcall;

Um pequeno exemplo retirado de ajuda de 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

Eu não sei exatamente o que você está perguntando? Pode ajudar se você esclareceu por que você precisa do "ID de computador exclusivo".

Opção 1

O bit:

"Eu estava planejando para armazená-lo no registro e verificá-lo quando o aplicativo é iniciado, e se mudou atualizar o registro."

me dá a impressão de que você está tentando detectar um diferente (mais recente) versão do aplicativo e / ou identificar diferentes aplicações dentro de uma suite.

Se este for o caso, então simplesmente pressionando Ctrl+Shift+G irá gerar um GUID exclusivo para você e inseri-lo na sua posição atual do cursor no código. Você também pode querer olhar para as informações de versão; talvez auto-incremento números de compilação?

Opção 2

Se você está tentando de alguma forma identificar instalações exclusivas em diferentes computadores, dê uma olhada na função CreateGUID na resposta de plainth.

Opção 3

Você mencionou que "não me importo se as mudanças id por causa de uma alteração de hardware ou reinstalação OS". Eu não tenho certeza se este é um fato importante, como: você está tentando detectar alterações de hardware ? Afinal, você disse que você não se importam ; mas então por mencionar isso em tudo?

Opção 4

Outra coisa que eu não considerado?

Você pode tentar usar um algoritmo UUID pelos seguintes motivos:

  • É independe hardware
  • It`s realmente aleatório
  • É independente de plataforma.

Mas cuidado: para alcançar a independência de hardware, você deve escolher um algoritmo que não usa o endereço MAC da máquina. Microsoft`s GUID usa-lo (era assim que eles descobriram que escreveu que o vírus te amo, lembra?)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top