Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inno setup 在Inno Setup Pascal脚本中,在运行时评估来自预处理器的数据集合_Inno Setup_Pascalscript - Fatal编程技术网

Inno setup 在Inno Setup Pascal脚本中,在运行时评估来自预处理器的数据集合

Inno setup 在Inno Setup Pascal脚本中,在运行时评估来自预处理器的数据集合,inno-setup,pascalscript,Inno Setup,Pascalscript,我试图在code部分中获取Inno设置定义值,但不是使用{VersionTool1}。我需要动态地传递定义的名称,因为有很多这样的名称(我希望避免使用大型开关)。我尝试了SetupSetting,但它不在设置部分(在它之前)。有没有办法做到这一点 #定义版本TOL1 2019.01.1111 #定义版本TOL2020.02.2111 ... [守则] 过程集合选择工具(工具名称:字符串); 变量 当前工具:字符串; 开始 ... CurrentTool:=“版本”+工具名称; CurrentTo

我试图在
code
部分中获取Inno设置定义值,但不是使用
{VersionTool1}
。我需要动态地传递定义的名称,因为有很多这样的名称(我希望避免使用大型开关)。我尝试了
SetupSetting
,但它不在设置部分(在它之前)。有没有办法做到这一点

#定义版本TOL1 2019.01.1111
#定义版本TOL2020.02.2111
...
[守则]
过程集合选择工具(工具名称:字符串);
变量
当前工具:字符串;
开始
...
CurrentTool:=“版本”+工具名称;
CurrentToolVersion:={#CurrentTool};
...
结束;
例如,局部变量
CurrentTool
的值将是
'VersionTool1'
,我想得到
VersionTool1
预处理器变量的值,它是
2020.02.2111

这是不可能的,请参阅


但还有其他解决办法

例如:

[代码]
变量
工具名称:TStringList;
工具版本:TStringList;
函数InitializeSetup():Boolean;
开始
工具名称:=TStringList.Create;
ToolVersions:=TStringList.Create;
#定义AddToolVersion(名称、版本)\
“ToolNames.Add('“+Name+”);ToolVersions.Add('“+Version+”);”
#发出AddToolVersion('Tool1','2019.01.1111')
#emit AddToolVersion('Tool2','2020.02.2111')
{ ... }
结果:=真;
结束;
(当然,只有当您实际上不硬编码版本号,而是使用只有预处理器才能执行的代码时,上述内容才有意义–类似于
GetStringFileInfo
,这是我从您的评论中了解到的您计划执行的代码)


然后你可以有这样一个函数:

函数GetToolVersion(ToolName:string):string;
变量
I:整数;
开始
I:=ToolNames.IndexOf(ToolName);
如果I>=0,则结果:=ToolVersions[I];
结束;
这是不可能的,请参阅


但还有其他解决办法

例如:

[代码]
变量
工具名称:TStringList;
工具版本:TStringList;
函数InitializeSetup():Boolean;
开始
工具名称:=TStringList.Create;
ToolVersions:=TStringList.Create;
#定义AddToolVersion(名称、版本)\
“ToolNames.Add('“+Name+”);ToolVersions.Add('“+Version+”);”
#发出AddToolVersion('Tool1','2019.01.1111')
#emit AddToolVersion('Tool2','2020.02.2111')
{ ... }
结果:=真;
结束;
(当然,只有当您实际上不硬编码版本号,而是使用只有预处理器才能执行的代码时,上述内容才有意义–类似于
GetStringFileInfo
,这是我从您的评论中了解到的您计划执行的代码)


然后你可以有这样一个函数:

函数GetToolVersion(ToolName:string):string;
变量
I:整数;
开始
I:=ToolNames.IndexOf(ToolName);
如果I>=0,则结果:=ToolVersions[I];
结束;