¿Hay alguna forma de generar un nuevo GUID desde el script Inno Setup?¿Cómo generar un nuevo GUID en Inno Setup?
Respuesta
encontrado esto en archivo de grupo de noticias ınnosetup:
http://news.jrsoftware.org/news/innosetup/msg76234.html
no he probado.
[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;
Puede hacerlo llamando a la función de API de Windows CoCreateGuid (en "OLE32.dll"), que declara dentro de una sección [Código] en su secuencia de comandos. Lo siento, no he usado Inno Setup por un tiempo, así que no sé exactamente cómo hacer esto. Para ayudar, aquí está una declaración del API de ejemplo para el GetWindow() Función:
Function GetWindow (HWND: Longint; uCmd: cardinal): Longint;
external '[email protected] stdcall';
Y aquí hay un enlace a una muestra de VB para el uso de CoCreateGuid:
http://support.microsoft.com/kb/176790
En alguna parte de todo esto es que su responder.
La respuesta de giorgian muestra cómo hacerlo en Inno Setup. – MusiGenesis
Aquí hay una aplicación un tanto más limpio de FormatGuid
, sin la función innecesaria hexagonal de formato (¿qué tenemos Format
para ?!):
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;
Todavía es necesario definir TGuid
e importar CoCreateGuid
como en las otras respuestas:
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';
Desafortunadamente, el resultado de la función FormatGuid en esta respuesta no produjo una representación de cadena de un GUID en un formato válido. En su lugar, se produjo una cadena como se detalla a continuación XXXXXXXX-XXXX-XXXX-XX-XX-XX-XX-XX-XX-XX-XX La validación se llevó a cabo a través de http://guid.us/Test/GUID –
An el formato de cadena alternativo se muestra en: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/System_TGUID.html Este formato parece producir GUID válidos de acuerdo con http: // guid.us/Test/GUID –
que estaba usando esta solución durante un tiempo (que se ejecuta 5.5.0 (a) y 5.5. 1 (a)).
Sin embargo, cuando actualicé a 5.5.2 (u) - mis scripts de compilación fallaron debido a un error de tipo duplicado: 'TGUID'.
Para solucionarlo, tuve que quitar:
type
TGUID = record
D1: LongWord;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;
Esto sólo ocurre en la versión Unicode - lo que significa 5.5.2 (u) ha construido en un tipo GUID.
- 1. ¿Cómo puedo usar GetVolumeInformation en Inno Setup?
- 2. Inno Setup página personalizada
- 3. Hook estándar Inno Setup checkbox
- 4. Crear un usuario restringido desde Inno Setup
- 5. Inno Setup: ¿Cómo veo la salida (traducción) del preprocesador Inno Setup?
- 6. ¿Cómo se muestra un hipervínculo en Inno Setup?
- 7. Inno-setup 32bit y 64bit en uno
- 8. Inno Setup Comprobación del proceso en ejecución
- 9. Constante Inno Setup en el Código Sección
- 10. ¿Cómo generar un GUID en VBScript?
- 11. ¿Cómo puedo generar un GUID en Vim?
- 12. ¿Cómo generar un GUID en Oracle?
- 13. Usando Inno Setup, ¿cómo importar un archivo .cer de certificado?
- 14. ¿Inno Setup para el servicio de Windows?
- 15. Inno Setup Instalación y configuración de IIS
- 16. Salir de Inno Setup Instalación desde [código]
- 17. Inno Setup Renombrar archivo durante el embalaje
- 18. Inno Setup - Setting Java Environment Variable
- 19. ¿Cómo puedo iniciar sesión en las instalaciones de Inno Setup?
- 20. Script Inno Setup para copiar carpetas
- 21. Inno Setup: cómo definir una matriz en const?
- 22. ¿Cómo uso "código" en la sección [Archivos] de Inno Setup?
- 23. Inno Setup uninstall executable location and name
- 24. ¿Cómo obtener la hora local en Inno Setup?
- 25. Instalar un archivo redistribuible adicional con Inno Setup
- 26. Generación de un nuevo GUID aleatorio en Delphi IDE
- 27. Función Inno Setup Exec() Espere por un tiempo limitado
- 28. ¿Cómo puedo hacer que Inno Setup ignore los directorios vacíos?
- 29. Cómo registrar una .NET DLL usando Inno Setup
- 30. Inno Setup: ¿Cómo abortar/finalizar la configuración durante la instalación?
Eso es lo que estaba buscando. – MusiGenesis
Además, hay otra llamada API de win32 que convierte el GUID sin formato de CoCreateGuid() en una representación de cadena en el formato {00000000-0000-0000-0000-000000000000}, lo que simplificaría en gran medida la función anterior, pero no recuerdo como se llama – MusiGenesis
StringFromCLSID es la segunda llamada a la API win32 que se utiliza para esto, también desde ole32.dll. – MusiGenesis