Вызовите функцию Pascal в препроцессоре Inno Setup #define - PullRequest
1 голос
/ 10 июля 2019

В своей настройке я пытаюсь сгенерировать версию приложения по коду, однако мне не удается ее вызвать. Моя установка выглядит так:

#define ApplicationVersion GetVersion('Application.exe')

[Setup]
AppVersion={#ApplicationVersion}
VersionInfoVersion={#ApplicationVersion}

...

[Code]

function GetVersion(Param: String): String;
begin
    { some magic ... }
    Result := '1.2.3';
end;

я тоже пробовал

[Setup]
AppVersion={code:GetVersion}
VersionInfoVersion={code:GetVersion}

Есть идеи, как добиться вызова пользовательской функции?

Примечание. #define ApplicationVersion GetFileVersion('Application.exe') не работает, поскольку «Application.exe» не предоставляет никакой информации о версии.

1 Ответ

1 голос
/ 10 июля 2019

Вы не можете вызвать код Pascal Script из препроцессора Inno Setup.

Препроцессор оценивается на время компиляции , как самое первое, до того, как будет запущен даже компилятор Pascal Script. Пока код Паскаля работает на время выполнения .

Вы можете сгенерировать код Pascal Script препроцессором. Что это означает, что вы не можете его назвать, поскольку код Pascal Script даже технически не существует во время оценки кода препроцессора.


Это действительно правильно:

[Setup]
AppVersion={code:GetVersion}

Поскольку AppVersion вычисляется в время выполнения , оно может включать константы , например {code} (что, возможно, не " константа " - но это в терминологии Inno Setup), как задокументировано :

Значение этой директивы , которая может включать в себя константы , ...


Но вы не можете использовать константы в VersionInfoVersion:

[Setup]
VersionInfoVersion={code:GetVersion}

Поскольку VersionInfoVersion оценивается в время компиляции , так как его значение сохраняется в исполняемом заголовке установщика.


Но вряд ли что-то не может быть реализовано в препроцессоре. Но вы должны сказать нам, что вы на самом деле хотите сделать.

...