Это невозможно, см. Оценка макроса препроцессора во время выполнения в Inno Setup Pascal Сценарий .
Но есть и другие решения.
Для пример:
[Code]
var
ToolNames: TStringList;
ToolVersions: TStringList;
function InitializeSetup(): Boolean;
begin
ToolNames := TStringList.Create;
ToolVersions := TStringList.Create;
#define AddToolVersion(Name, Version) \
"ToolNames.Add('" + Name + "'); ToolVersions.Add('" + Version +"');"
#emit AddToolVersion('Tool1', '2019.01.1111')
#emit AddToolVersion('Tool2', '2020.02.2111')
{ ... }
Result := True;
end;
(конечно, вышесказанное имеет смысл только в том случае, если вы фактически не кодируете номера версий жестко, а используете код, который может делать только препроцессор - что-то вроде GetStringFileInfo
, что я понял из ваших комментариев, что вы планируете)
И тогда у вас может быть такая функция:
function GetToolVersion(ToolName: string): string;
var
I: Integer;
begin
I := ToolNames.IndexOf(ToolName);
if I >= 0 then Result := ToolVersions[I];
end;