Я сделал script, включая это:
[Setup]
SetupLogging=yes
Но я не могу найти файл журнала. Похоже, он не был создан. Где это может быть?
Можно ли указать, где я хочу его разместить?
Спасибо
Я сделал script, включая это:
[Setup]
SetupLogging=yes
Но я не могу найти файл журнала. Похоже, он не был создан. Где это может быть?
Можно ли указать, где я хочу его разместить?
Спасибо
Вы можете указать путь к файлу журнала с помощью параметра командной строки /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
Как и в случае с 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;