Existe-t-il un moyen de générer un nouveau GUID à partir du script Inno Setup?Comment générer un nouveau GUID dans Inno Setup?
Répondre
trouvé sur archives newsgroup InnoSetup:
http://news.jrsoftware.org/news/innosetup/msg76234.html
Je ne l'ai pas testé.
[Code]
type
TGUID = record
D1: LongWord;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;
function CoCreateGuid(var Guid:TGuid):integer;
external '[email protected] stdcall';
function inttohex(l:longword; digits:integer):string;
var hexchars:string;
begin
hexchars:='ABCDEF';
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;
Vous pouvez le faire en appelant la fonction Windows API CoCreateGuid (dans "OLE32.dll"), que vous déclarez dans une section [Code] dans votre script. Désolé, je n'ai pas utilisé Inno Setup depuis un moment, donc je ne sais pas exactement comment faire. Pour vous aider, voici une déclaration d'API exemple pour la fonction GetWindow():
Function GetWindow (HWND: Longint; uCmd: cardinal): Longint;
external '[email protected] stdcall';
Et voici un lien vers un échantillon de VB pour l'utilisation CoCreateGuid:
http://support.microsoft.com/kb/176790
Quelque part dans tout cela est votre répondre.
La réponse de giorgian montre comment faire cela dans Inno Setup. – MusiGenesis
est ici une mise en œuvre un peu plus propre de FormatGuid
, sans la fonction de mise en forme hexagonale inutile (qu'avons-nous Format
pour ?!):
function FormatGuid(Guid:TGuid):string;
begin
result:=Format('%.8x-%.4x-%.4x-%.2x-%.2x-%.2x-%.2x-%.2x-%.2x-%.2x-%.2x', [Guid.D1, Guid.D2, Guid.D3, Guid.D4[0], Guid.D4[1], Guid.D4[2], Guid.D4[3], Guid.D4[4], Guid.D4[5], Guid.D4[6], Guid.D4[7]]);
end;
Vous devez toujours définir TGuid
et importer CoCreateGuid
comme dans les autres réponses:
type
TGuid = record
D1: LongWord;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;
function CoCreateGuid(var Guid:TGuid):integer;
external '[email protected] stdcall';
Malheureusement, le résultat de la fonction FormatGuid dans cette réponse n'a pas produit une représentation sous forme de chaîne d'un GUID dans un format valide. Au lieu de cela, une chaîne a été produite comme ci-dessous. XXXXXXXX-XXXX-XXXX-XX-XX-XX-XX-XX-XX-XX-XX La validation a été réalisée via http://guid.us/Test/GUID –
An format de chaîne alternative est montré à: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/FR/html/delphivclwin32/System_TGUID.html Ce format a semblé produire des GUID valides selon http: // guid.us/Test/GUID –
J'utilisais cette solution pendant un certain temps (fonctionnant sous 5.5.0 (a) et 5.5. 1 (a)).
Cependant, lorsque j'ai mis à jour vers 5.5.2 (u) - mes scripts de construction ont échoué à cause d'une erreur de type en double: 'TGUID'.
Pour le fixer, je devais enlever:
type
TGUID = record
D1: LongWord;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;
Cela ne se passe sur la version Unicode - ce qui signifie 5.5.2 (u) est un type construit GUID.
- 1. Inno setup: cacher les fichiers
- 2. Comment créer un fichier texte dans Inno Setup?
- 3. Codes de retour msi dans Inno Setup
- 4. Pointeurs de fonction dans Inno Setup
- 5. Comment générer un GUID dans VBScript?
- 6. Inno Setup: Désinstaller le serveur Dll
- 7. Ajout d'assemblages au GAC depuis Inno Setup
- 8. Comment générer un GUID sous Windows Mobile?
- 9. Exécution d'un autre programme d'installation dans une installation Inno Setup
- 10. Comment annuler le programme d'installation avec Inno Setup?
- 11. Génération d'un nouveau GUID aléatoire dans l'IDE Delphi
- 12. conditionnellement installer les pilotes 64 bits avec Inno Setup
- 13. Ajout d'une application à OpenWithList avec Inno Setup
- 14. pygtk + py2exe + Inno Setup -> icône de raccourci
- 15. Comment convertir une valeur de version de chaîne en valeur numérique dans Inno Setup Scripts?
- 16. Comment utiliser Inno Setup pour installer un plugin/fichier dans un dossier basé sur une entrée de registre?
- 17. Quelqu'un connaît un script d'installation .NET Framework 2.0 solide pour Inno Setup?
- 18. Comment passez-vous les paramètres au compilateur de ligne de commande Inno Setup?
- 19. Inno Setup: Événements de contrôle de capture dans la page de l'assistant
- 20. Comment passer des commandes à une console Cygwin sous Windows en utilisant Inno Setup
- 21. numéro de version automatisé-build avec WiX, Inno Setup, et VS2008
- 22. Comment créer un guid dans MFC
- 23. Comment faire pour hacher un GUID et un horodatage 64 bits dans un autre GUID
- 24. Comment générer un profil d'utilisateur local pour un nouveau compte d'utilisateur dans Windows?
- 25. Comment puis-je obtenir une valeur de registre dans Inno Setup lorsque la valeur utilise uniquement le nom par défaut?
- 26. Création d'un nouveau Guid dans un extrait de code à l'aide de C#
- 27. Dans Inno Setup, est-il possible d'ajouter des instructions conditionnelles à ce qui est exécuté dans la section [Run]?
- 28. Comment ajouter un GUID simpleType dans un schéma XML?
- 29. Comment corriger Inno erreur d'installation EndUpdateResource a échoué (110)
- 30. GUID semblable à YouTube
C'est ce que je cherchais. – MusiGenesis
En outre, il existe un autre appel API Win32 qui convertit le GUID brut de CoCreateGuid() en une représentation sous forme de chaîne au format {00000000-0000-0000-0000-000000000000}, ce qui simplifierait grandement la fonction ci-dessus, mais je ne me souviens pas ce qu'il est nommé. – MusiGenesis
StringFromCLSID est le deuxième appel d'API Win32 à utiliser pour cela, également à partir de ole32.dll. – MusiGenesis