Search code examples
inno-setuppascalscript

How do I copy the Inno Setup log file to a certain destination after setup is done?


I have asked chat.openai how to copy the log path to a certain path after it's done setupping.

It proposed this, but I think it's wrong. It expects the log file to be in {app}\SetupLog.log", but I don't think it's there.

Here is what it proposed.

Can somebody correct it? I do not set the log path from outside. It will be the default path. I can not change that unfortunately. And when the installation is done, the temp installation folder is deleted, so I don't have a chance to view the log file.

Thank you!

#define LogFileName "SetupLog.log"
#define LogDestination "C:\MyLogs"

[Setup]
DefaultDirName={pf}\My Application
DefaultGroupName=My Application

[Files]
Source: "MyApp.exe"; DestDir: "{app}"
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
  LogPath: string;
  DestinationPath: string;
begin
  if CurStep = ssPostInstall then
  begin
    LogPath := ExpandConstant('{app}\SetupLog.log');
    DestinationPath := ExpandConstant(LogDestination + '\SetupLog.log');
    if FileCopy(LogPath, DestinationPath, false) then
      MsgBox('Log file was copied successfully to ' + DestinationPath, mbInformation, MB_OK)
    else
      MsgBox('Failed to copy log file to ' + DestinationPath, mbError, MB_OK);
  end;
end;

Solution

  • There is a Q & A about this because I asked at one time. I can't find it.

    But, this is the code I am now using:

    procedure CurStepChanged(CurStep: TSetupStep);
    var
        ResultCode: integer;
        strLogFilePathName, strLogFileName, strNewFilePathName: string;
    begin
        if (CurStep = ssDone) then
        begin
            strLogFilePathName := ExpandConstant('{log}');
            strLogFileName := ExtractFileName(strLogFilePathName);
            strNewFilePathName := ExpandConstant('{#CommonDataDir}\Installation Logs\') + strLogFileName;
            FileCopy(strLogFilePathName, strNewFilePathName, false);
        end;
    end;
    

    Change the folder to copy the log to as required. Notice that I am using ssDone.