Inno setup 在Inno设置预处理器#define中调用Pascal函数

Inno setup 在Inno设置预处理器#define中调用Pascal函数,inno-setup,pascalscript,Inno Setup,Pascalscript,在我的设置中,我试图通过代码生成应用程序版本,但是我没有设法调用它。我的设置如下所示: #定义ApplicationVersion GetVersion('Application.exe') [设置] AppVersion={#ApplicationVersion} VersionInfo={#应用程序版本} ... [守则] 函数GetVersion(参数:String):String; 开始 {一些魔法…} 结果:='1.2.3'; 结束; 我也试过了 [Setup] AppVersion

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

#定义ApplicationVersion GetVersion('Application.exe')
[设置]
AppVersion={#ApplicationVersion}
VersionInfo={#应用程序版本}
...
[守则]
函数GetVersion(参数:String):String;
开始
{一些魔法…}
结果:='1.2.3';
结束;
我也试过了

[Setup]
AppVersion={code:GetVersion}
VersionInfoVersion={code:GetVersion}
有没有办法实现用户函数调用


注意,
#define ApplicationVersion GetFileVersion('Application.exe')
不起作用,因为“Application.exe”不提供任何版本信息。

您不能从Inno安装程序预处理器调用Pascal脚本代码。

在调用Pascal脚本编译器之前,首先在编译时对预处理器进行评估。而Pascal代码在运行时运行

您实际上可以通过预处理器生成Pascal脚本代码。这意味着,您不能调用它,因为在计算预处理器代码时,Pascal脚本代码在技术上甚至不存在


这实际上是正确的:

[Setup]
AppVersion={code:GetVersion}
因为
AppVersion
是在运行时进行评估的,所以它可以包括如下内容(可以说它不是一个“常量”——但在Inno安装术语中是这样的):

此指令的值,可能包括常数


但不能在
versionInfo
中使用常量:

[Setup]
VersionInfoVersion={code:GetVersion}
因为
versionInfo
是在编译时计算的,因为它的值存储在安装程序可执行文件头中



但几乎没有什么东西不能在预处理器中实现。但是你必须告诉我们你真正想做什么。

他可能只是想从主应用程序exe中读取资源,就像你帮我做的那样。@AndrewTruckle我不确定,请参阅问题的最后一句:“Application.exe”不提供任何版本信息。是的,该过程必须读取文本文件并从中解析版本信息。所以,它不是一个.exe,这只是一个例子。好的,我相信我已经回答了你当前的问题。我的回答没有什么可补充的。因此,考虑一个关于你的具体问题的新的具体问题。