C'è un modo per generare un nuovo GUID dallo script Inno Setup?Come generare un nuovo GUID in Inno Setup?
risposta
Trovato questo su archivio newsgroup InnoSetup:
http://news.jrsoftware.org/news/innosetup/msg76234.html
non l'ho testato.
[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;
È possibile eseguire questa operazione chiamando la funzione dell'API di Windows CoCreateGuid (in "OLE32.dll"), che si dichiara all'interno di una sezione [Codice] del proprio script. Scusa, non ho usato Inno Setup per un po ', quindi non so esattamente come farlo. Per aiutare, ecco una dichiarazione campione di API per la GetWindow() Funzione:
Function GetWindow (HWND: Longint; uCmd: cardinal): Longint;
external '[email protected] stdcall';
Ed ecco un link ad un campione VB per l'utilizzo di CoCreateGuid:
http://support.microsoft.com/kb/176790
Da qualche parte in tutto questo è tuo risposta.
La risposta di giorgian mostra come eseguire questa operazione in Inno Setup. – MusiGenesis
Ecco un'implementazione un po 'più pulita di FormatGuid
, senza la funzione hex-formattazione inutili (che cosa abbiamo Format
per ?!):
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;
È ancora necessario definire TGuid
e importare CoCreateGuid
come nelle altre risposte:
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';
Sfortunatamente, il risultato della funzione FormatGuid in questa risposta non ha prodotto una rappresentazione di stringa di un GUID in un formato valido. Invece, è stata prodotta una stringa come sotto XXXXXXXX-XXXX-XXXX-XX-XX-XX-XX-XX-XX La convalida è stata effettuata tramite http://guid.us/Test/GUID –
An Il formato stringa alternativo è mostrato a: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/System_TGUID.html Questo formato sembra produrre GUID validi in base a http: // guid.us/Test/GUID –
Stavo usando questa soluzione per un po '(in esecuzione 5.5.0 (a) e 5.5. 1 (a)).
Tuttavia, quando ho aggiornato a 5.5.2 (u) - i miei script di compilazione non sono riusciti a causa di un errore di tipo duplicato: "TGUID".
Al fine di risolvere il problema, ho dovuto togliere:
type
TGUID = record
D1: LongWord;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;
Questo sta accadendo solo sulla versione Unicode - il che significa 5.5.2 (u) è dotato di un tipo GUID.
- 1. Comando Linux per generare un nuovo GUID?
- 2. Come posso utilizzare GetVolumeInformation in Inno Setup?
- 3. Come generare un nuovo Guid nella stored procedure?
- 4. Errori Inno Setup RegAsm.exe
- 5. Come posso generare un GUID in Vim?
- 6. Inno Setup: utilizzo di JSON
- 7. Come commentare un blocco di istruzioni in inno setup
- 8. Inno Setup: Come posso vedere l'output (traduzione) del preprocessore di Inno Setup?
- 9. Richiesta POST HTTP in Inno Setup Script
- 10. Converti booleano in stringa con Inno Setup
- 11. Inno Setup Verifica del processo in esecuzione
- 12. Inno Setup - Come copiare un file prima dell'installazione?
- 13. Utilizzando Inno Setup, come importare un file .cer certificato?
- 14. Come installare un servizio Windows con Inno Setup?
- 15. Inno Setup Associazione file opzionale (selezionabile dall'utente)
- 16. Inno Setup Rinomina file durante l'imballaggio
- 17. Inno Setup: come definire una matrice in const?
- 18. Come ottenere l'ora della data locale in Inno Setup?
- 19. Come utilizzare "codice" nella sezione [Files] di Inno Setup?
- 20. Inno setup i18n per pannello personalizzato
- 21. Inno setup - percorso relativo a ReadIni
- 22. Aggiornamento del servizio Windows tramite Inno Setup
- 23. Inno Setup Installazione e configurazione di IIS
- 24. Inno-Setup: Disinstalla senza privilegio di amministratore
- 25. Uscita da Inno Setup Installazione da [code]
- 26. Script Inno Setup per copiare le cartelle
- 27. Inno Setup installazione predefinita cambio cartella
- 28. Inno Setup Immagine bitmap non valida
- 29. Inno Setup: TBitmapImage non viene visualizzato
- 30. Inno Setup: Aggiungi un campo di inserimento personalizzato
Questo è quello che stavo cercando. – MusiGenesis
Inoltre, c'è un'altra chiamata API win32 che converte il GUID raw da CoCreateGuid() in una rappresentazione stringa nel formato {00000000-0000-0000-0000-000000000000}, che semplificherebbe notevolmente la funzione sopra, ma non ricordo come si chiama – MusiGenesis
StringFromCLSID è la seconda chiamata API win32 da utilizzare per questo, anche da ole32.dll. – MusiGenesis