Inno setup Inno安装程序在安装程序中指定日志名

Inno setup Inno安装程序在安装程序中指定日志名,inno-setup,Inno Setup,设置SetupLogging=yes将创建一个文件: %TEMP%\Setup Log YYYY-MM-DD#NNN.txt 有没有办法指定文件名?请注意,我知道我可以在安装()结束时使用FileCopy重命名它,但我只想在开始时指定文件名,就像使用开关/log=%TEMP%\ProductInstall.log可以完成的一样。这可能吗?不可能。不可能。SetupLogging的日志文件名格式是硬编码的 如果在命令行上指定了/LOG=,那么您只需签入InitializeSetup,如果未指定,则

设置
SetupLogging=yes
将创建一个文件:

%TEMP%\Setup Log YYYY-MM-DD#NNN.txt


有没有办法指定文件名?请注意,我知道我可以在安装()结束时使用
FileCopy
重命名它,但我只想在开始时指定文件名,就像使用开关
/log=%TEMP%\ProductInstall.log
可以完成的一样。这可能吗?

不可能。不可能。
SetupLogging
的日志文件名格式是硬编码的

如果在命令行上指定了
/LOG=
,那么您只需签入
InitializeSetup
,如果未指定,则使用
/LOG=
重新生成安装程序

虽然这有点过分了

函数shell执行(hwnd:hwnd;lpOperation:string;lpFile:string;
lpParameters:string;lpDirectory:string;nShowCmd:Integer):THandle;
外部的ShellExecuteW@shell32.dllstdcall';
函数InitializeSetup():Boolean;
变量
HasLog:布尔型;
参数:字符串;
I:整数;
S:字符串;
RetVal:整数;
开始
HasLog:=假;
参数:='';
对于I:=1的参数
开始
S:=ParamStr(I);
如果CompareText(Copy(S,1,5),“/LOG=”)=0,则
开始
HasLog:=真;
打破
结束;
//不要通过我们的/SL5开关
//由于Inno Setup 6.2,
//看https://groups.google.com/g/innosetup/c/pDSbgD8nbxI
如果CompareText(Copy(S,1,5),“/SL5=”)=0,则
开始
Params:=Params+AddQuotes+“”;
结束;
结束;
结果:=真;
如果是HasLog那么
开始
日志(“指定日志,继续”);
结束
其他的
开始
//添加所选语言,以便不再提示用户
Params:=Params+'/LANG='+ActiveLanguage;
//强制测井
参数:=
Params+'/LOG=“'+ExpandConstant('{%TEMP}\ProductInstall.LOG')+'”;
日志(格式('未指定日志文件,使用[%s]重新启动安装程序,[Params]);
检索:=
ShellExecute(0',ExpandConstant('{srceexe}'),Params',SW_SHOW);
日志(格式('重新启动安装程序返回[%d],[RetVal]);
如果RetVal>32,则
开始
日志('重新启动并记录成功,中止此实例');
结果:=假;
结束
其他的
开始
日志(格式('Restarting with logging failed[%s],reserving this instance'[
系统错误消息(RetVal)]);
结束;
结束;
结束;

Martin,谢谢你证实了我的怀疑,并提出了解决办法,尽管正如你所说,这有点过分了。我想我会在安装结束时重新命名这个文件。