existe-t-il un moyen de générer un nouveau GUID à l'intérieur du script d'installation Inno? P>
4 Réponses :
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 (): et voici un lien vers un échantillon VB pour l'utilisation de COCREATEGUID: P> http://support.microsoft.com/kb/176790 p> quelque part dans tout cela est votre réponse. P> p>
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;
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'.
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';
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
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'. P>
Pour le réparer, je devais supprimer: p> Ceci ne se produit que sur la version Unicode - Signification 5.5.2 (U) a un type de guid intégré. P> p>