ExpandConstant 无法识别使用 Inno Setup 预处理器 #define 定义的常量

问题描述 投票:0回答:1

我正在尝试设置一个安装文件(可选)安装 .NET 5(如果尚未安装)。
但是,我在定义要安装在常量中的 .NET 版本时遇到了困难。

我的脚本是这样设置的

#define DotNetVersion "5"
...
[Tasks]   
Name: "dotnet"; Description: "{cm:DotNet}"; GroupDescription: "{cm:Prerequisites}"
...

[Files]
Source: "..\Dependencies\{#DotNetInstallFile}"; DestDir: {tmp}; \
    Flags: deleteafterinstall; AfterInstall: InstallDotNet; \
    Check: NetNotInstalled(ExpandConstant('{DotNetVersion}')); Tasks: "dotnet"

当我尝试运行生成的安装文件时,出现以下错误:

内部错误:表达式错误'内部错误:未知常量“DotNetVersion”'

Error box stating: 'Internal error: Unknown constant

如果我将

NetNotInstalled
替换为
ExpandConstant('{DotNetVersion}')
,则函数
'5'
可以正常工作,但我希望能够轻松更改此设置,而无需修改超过定义的常量。

我不明白这里出了什么问题。 Inno Setup 文档指出这应该是有效的。
对任何其他函数使用相同的常数似乎可以完美地工作。

inno-setup
1个回答
2
投票

使用 Inno Setup 预处理器定义的变量不是 Inno Setup 常量。在其上调用

ExpandConstant
函数 没有任何效果。

要扩展预处理器变量(或任何表达式),您可以使用

{#VariableOrExpression}
语法。这是一个内联预处理器指令调用,其中,当没有显式指定指令时,会隐含
emit
。所以
{#VariableOrExpression}
{#emit VariableOrExpression}
相同。与每个预处理器构造一样,它是在编译时评估的(与
ExpandConstant
相反)。

实际上,您已经使用

{#DotNetInstallFile}
正确执行了此操作,因此使用
DotNetVersion
执行相同操作:

Source: "..\Dependencies\{#DotNetInstallFile}"; \
    DestDir: {tmp}; Flags: deleteafterinstall; AfterInstall: InstallDotNet; \
    Check: NetNotInstalled('{#DotNetVersion}'); Tasks: "dotnet"

另请参阅如何在 Inno Setup 中使用变量\宏?

© www.soinside.com 2019 - 2024. All rights reserved.