在Inno Setup预处理器中调用Pascal函数#define

时间:2019-07-10 15:02:03

标签: inno-setup pascalscript

在我的设置中,我尝试通过代码生成应用程序版本,但是我无法调用它。我的设置如下:

#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 个答案:

答案 0 :(得分:1)

您不能从Inno Setup预处理器调用Pascal脚本代码。

首先,甚至在调用Pascal Script编译器之前,

编译时间上对预处理器进行评估。当Pascal Code在运行时间上运行时。

您实际上可以通过预处理器生成Pascal脚本代码。这意味着什么,您不能调用它,因为在评估预处理程序代码时,Pascal Script代码甚至在技术上都不存在。


这实际上是正确的:

[Setup]
AppVersion={code:GetVersion}

因为AppVersion是在运行时进行评估的,所以它可以包含constants,就像{code}(可能不是“常数” < / em> –但使用Inno Setup术语),如documented

  

该指令的值,其中可能包含常量,...


但是您不能在VersionInfoVersion中使用常量:

[Setup]
VersionInfoVersion={code:GetVersion}

因为VersionInfoVersion是在编译时间求值的,因为它的值存储在安装程序可执行标头中。


但是几乎没有什么不能在预处理器中实现。但是您必须告诉我们您实际上想做什么。