Не удалось установить файл журнала

Я сделал script, включая это:

[Setup]

SetupLogging=yes

Но я не могу найти файл журнала. Похоже, он не был создан. Где это может быть?

Можно ли указать, где я хочу его разместить?

Спасибо

Ответ 1

Вы можете указать путь к файлу журнала с помощью параметра командной строки /LOG="filename". Таким образом, для регистрации, например. в файл C:\FileName.log выполните настройку таким образом:

Setup.exe /LOG="C:\FileName.log"

Если вы не укажете приведенный выше параметр командной строки, журнал будет сохранен во временной директории в файл со следующим шаблоном имени:

Setup Log YYYY-MM-DD #NNN.txt

Где:

YYYY - current system time year
MM - current system time month
DD - current system time day
NNN - number unique for each day starting from 1

Ответ 2

Как и в случае с TLama, если вы не укажете место назначения журнала в качестве параметра командной строки, то он войдет в папку temp. Ниже приведен код, который я использую для копирования файла журнала в событии DeinitializSetup для установщика и события Uninstaller DeinitializUninstall.

Установщик

После установки файл журнала копируется из папки temp и помещает его в один из вариантов. Он обрабатывает некоторые случаи досрочного завершения.

function MoveLogfileToLogDir():boolean;
var
  logfilepathname, logfilename, newfilepathname: string;
begin
  logfilepathname := expandconstant('{log}');

  //If logfile is disabled then logfilepathname is empty
  if logfilepathname = '' then begin
     result := false;
     exit;
  end;

  logfilename := ExtractFileName(logfilepathname);
  try
    //Get the install path by first checking for existing installation thereafter by GUI settings
    if IsAppInstalled then
       newfilepathname := GetInstalledPath + 'Log\Installer\'
    else
       newfilepathname := expandconstant('{app}\Log\Installer\');
  except
    //This exception is raised if {app} is invalid i.e. if canceled is pressed on the Welcome page
        try
          newfilepathname := WizardDirValue + '\Log\Installer\'; 
        except
          //This exception is raised if WizardDirValue i s invalid i.e. if canceled is pressed on the Mutex check message dialog.
          result := false;
        end;
  end;  
  result := ForceDirectories(newfilepathname); //Make sure the destination path exists.
  newfilepathname := newfilepathname + logfilename; //Add filename

  //if copy successful then delete logfilepathname 
  result := filecopy(logfilepathname, newfilepathname, false);

  if result then
     result := DeleteFile(logfilepathname);
end;

//Called just before Setup terminates. Note that this function is called even if the user exits Setup before anything is installed.
procedure DeinitializeSetup();
begin
  MoveLogfileToLogDir;
end;

Uninstaller

Вход в Uninstaller активируется путем передачи параметра командной строки "/Log" на uninstall.exe. Добавьте это в путь удаления в реестре. Cavet: этот метод будет работать только при удалении из панели управления (т.е. Он не будет работать, если uninstall.exe будет удален напрямую)

function EnableUninstallerLogging():boolean;
var Key : string;          //Registry path to details about the current installation (uninstall info)
    Value : string;
begin

  //If logfile is disabled then logfilepathname is empty
  if expandconstant('{log}') = '' then begin
     result := false;
     exit;
  end;

  Key := GetAppUninstallRegKey;
  Value := 'UninstallString';
  if RegValueExists(HKEY_LOCAL_MACHINE, Key, Value) then
     result := RegWriteStringValue(HKEY_LOCAL_MACHINE, Key, Value, ExpandConstant('"{uninstallexe}" /Log'));
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
   case CurStep of
         ssInstall : ;
     ssPostInstall : begin
                       //Enable logging during uninstall by adding command line parameter "/Log" to the uninstaller  reg-path 
                       EnableUninstallerLogging;
                     end;
            ssDone : ;
  end;
end;

//Called just before Uninstaller terminates.
procedure DeinitializeUninstall();
begin
  MoveLogfileToLogDir;
end;

Общие функции

Некоторые общие функции, которые я использую в приведенном выше примере кода:

function GetAppID():string;
begin
  result := ExpandConstant('{#SetupSetting("AppID")}');     
end;

function GetAppUninstallRegKey():string;
begin
  result := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\' + GetAppID + '_is1'); //Get the Uninstall search path from the Registry
end;

function IsAppInstalled():boolean;
var Key : string;          //Registry path to details about the current installation (uninstall info)
begin                            
  Key := GetAppUninstallRegKey;
  result := RegValueExists(HKEY_LOCAL_MACHINE, Key, 'UninstallString');
end;

//Return the install path used by the existing installation.
function GetInstalledPath():string;
var Key : string;
begin
  Key := GetAppUninstallRegKey;
  RegQueryStringValue(HKEY_LOCAL_MACHINE, Key, 'InstallLocation', result);
end;