9
votes

Comment générer un nouveau guida dans Inno Configuration?

existe-t-il un moyen de générer un nouveau GUID à l'intérieur du script d'installation Inno?


0 commentaires

4 Réponses :


1
votes

Vous pouvez le faire en appelant la fonction API Windows CoCreateguid (dans "Ole32.dll"), que vous déclarez dans une section [CODE] de votre script. Désolé, je n'ai pas utilisé Inno Configuration dans un moment où je ne sais pas exactement comment faire cela. Pour aider, voici une exemplaire de déclaration d'API pour la fonction GetWindow (): xxx

et voici un lien vers un échantillon VB pour l'utilisation de COCREATEGUID:

http://support.microsoft.com/kb/176790

quelque part dans tout cela est votre réponse.


0 commentaires

14
votes

a trouvé cela sur Innosetup Newsgroup Archive:

http: //news.jrsoftware. Org / News / InnoSetup / msg76234.html P>

Je ne l'ai pas testé. P>

[Code]

type
  TGUID = record
    D1: LongWord;
    D2: Word;
    D3: Word;
    D4: array[0..7] of Byte;
  end;

function CoCreateGuid(var Guid:TGuid):integer;
 external 'CoCreateGuid@ole32.dll stdcall';

function inttohex(l:longword; digits:integer):string;
var hexchars:string;
begin
 hexchars:='0123456789ABCDEF';
 setlength(result,digits);
 while (digits>0) do begin
  result[digits]:=hexchars[l mod 16+1];
  l:=l div 16;
  digits:=digits-1;
 end;
end;

function GetGuid(dummy:string):string;
var Guid:TGuid;
begin
  if CoCreateGuid(Guid)=0 then begin
  result:='{'+IntToHex(Guid.D1,8)+'-'+
           IntToHex(Guid.D2,4)+'-'+
           IntToHex(Guid.D3,4)+'-'+
           IntToHex(Guid.D4[0],2)+IntToHex(Guid.D4[1],2)+'-'+
           IntToHex(Guid.D4[2],2)+IntToHex(Guid.D4[3],2)+
           IntToHex(Guid.D4[4],2)+IntToHex(Guid.D4[5],2)+
           IntToHex(Guid.D4[6],2)+IntToHex(Guid.D4[7],2)+
           '}';
  end else
    result:='{00000000-0000-0000-0000-000000000000}';
end;

function InitializeSetup(): Boolean;
begin
  MsgBox(GetGuid(''), mbInformation, MB_OK);
  Result := False;
end;


4 commentaires

C'est ce que je cherchais.


En outre, il existe un autre appel d'API Win32 qui convertit le GUID brut de COCREATEGUID () en une représentation de chaîne dans le format {0000000000000000000000-0000-000000000000}, ce qui simplifierait grandement la fonction ci-dessus, mais je ne me souviens pas de quoi Il est nommé.


StringfromclsidSid est le deuxième appel de l'API Win32 à utiliser pour cela, également à partir de ole32.dll.


Lorsque je suis mis à jour à 5.5.2 (Unicode) - Mes scripts de construction ont échoué à cause d'une erreur de type en double: 'TGUID'.



2
votes

Voici une implémentation quelque peu plus propre de formatGuid code>, sans la fonction de formatage hexagonal inutile (qu'est-ce que nous avons format code> pour ?!):

type
  TGuid = record
    D1: LongWord;
    D2: Word;
    D3: Word;
    D4: array[0..7] of Byte;
  end;

function CoCreateGuid(var Guid:TGuid):integer;
 external 'CoCreateGuid@ole32.dll stdcall';


2 commentaires

Malheureusement, le résultat de la fonction de formatGuid de cette réponse n'a pas produit de représentation de chaîne d'un GUID dans un format valide. Au lieu de cela, une chaîne a été produite comme ci-dessous XXXXXXXXX-XXXX-XXXX-XX-XX-XX-XX-XX-XX-XX-XX-XX Validation a été réalisée via guid.us/test/guid


Un format de chaîne alternatif est affiché à: DOCS. Embarcadero.com/products/rad_studio/delphiandcpp2009/... Ce format est apparu pour produire des GUID valides conformément à GUID. US / Test / GUID



3
votes

J'utilisais cette solution pendant un moment (en cours d'exécution 5.5.0 (a) et 5.5.1 (a)).

Cependant, lorsque je suis mis à jour à 5.5.2 (u) - mes scripts de construction ont échoué à cause de une erreur de type en double: 'TGUID'.

Pour le réparer, je devais supprimer: xxx

Ceci ne se produit que sur la version Unicode - Signification 5.5.2 (U) a un type de guid intégré.


0 commentaires