2011-02-25 14 views

Respuesta

16

Puede establecer la opción SetupLogging (SetupLogging=yes) y luego integrar el siguiente código en su secuencia de comandos para copiar el registro en alguna parte.

procedure CurStepChanged(CurStep: TSetupStep); 
var 
    logfilepathname, logfilename, newfilepathname: string; 
begin 
    logfilepathname := ExpandConstant('{log}'); 
    logfilename := ExtractFileName(logfilepathname); 
    newfilepathname := ExpandConstant('{app}\') + logfilename; 

    if CurStep = ssDone then 
    begin 
    FileCopy(logfilepathname, newfilepathname, false); 
    end; 
end; 
+6

¿De verdad cree que es necesario volver a calcular las rutas y los nombres de archivos una y otra vez para cada paso de configuración? ¿Por qué no mover eso al bloque 'if CurStep = ssDone then'? –

+6

+1 Mittheil! He usado tu consejo, pero llama a DeinitializeSetup. Luego, el registro se copia incluso si el usuario sale de la instalación antes de instalar cualquier cosa. – Lars

10

Siguiendo el comentario de Lars que utiliza el procedimiento DeinitializeSetup(), pero también me cambió la nueva ruta del archivo a utilizar la constante {src} para copiar el archivo de registro en el directorio que el instalador se ejecuta de en vez de {app} constante que puede/no puede crearse si el usuario cancela la instalación:

// Called just before Setup terminates. Note that this function is called even if the user exits Setup before anything is installed. 
procedure DeinitializeSetup(); 
var 
    logfilepathname, logfilename, newfilepathname: string; 
begin 
    logfilepathname := ExpandConstant('{log}'); 
    logfilename := ExtractFileName(logfilepathname); 
    // Set the new target path as the directory where the installer is being run from 
    newfilepathname := ExpandConstant('{src}\') + logfilename; 

    FileCopy(logfilepathname, newfilepathname, false); 
end; 
Cuestiones relacionadas