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

时间:2021-06-19 11:43:24

标签: inno-setup

我正在尝试设置一个安装文件,该文件(可选)安装 .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 "DotNetVersion"'

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

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

1 个答案:

答案 0 :(得分:2)

变量 defined using Inno Setup preprocessor 不是 Inno Setup constant。对其调用 ExpandConstant function 无效。

要扩展预处理器变量(或任何 expression),您可以使用 {#VariableOrExpression} 语法。它是一个 inline preprocessor directive call,当没有明确指定指令时,emit 是隐含的。所以 {#VariableOrExpression}{#emit VariableOrExpression} 相同。与每个预处理器构造一样,它在编译时进行评估(与 ExpandConstant 相反)。

您实际上已经用 {#DotNetInstallFile} 正确地做到了这一点,所以对 DotNetVersion 也这样做:

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

另见How to use variables \ macros with Inno Setup?

相关问题