在 ExpandConstant 中无法识别使用 Inno Setup 预处理器 #define 定义的常量
Constant defined using Inno Setup preprocessor #define is not recognised in ExpandConstant
我正在尝试设置一个安装文件,如果 .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"
当我尝试 运行 生成的安装文件时,出现以下错误:
Internal error: Expression error 'Internal error: Unknown constant "DotNetVersion"'
如果我将 ExpandConstant('{DotNetVersion}')
替换为 '5'
,函数 NetNotInstalled
可以正常工作,但我希望能够轻松地更改它,而无需修改超过定义的常量。
我不明白这里出了什么问题。 Inno Setup 文档声明此 应该 有效。
对任何其他函数使用相同的常量似乎可以完美地工作。
一个变量defined using Inno Setup preprocessor is not Inno Setup constant. Calling ExpandConstant
function对它没有影响。
扩展预处理器变量(或隐含任何 expression), you can use {#VariableOrExpression}
syntax. It's an inline preprocessor directive call, where, when no directive is explicitly specified, the 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?
我正在尝试设置一个安装文件,如果 .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"
当我尝试 运行 生成的安装文件时,出现以下错误:
Internal error: Expression error 'Internal error: Unknown constant "DotNetVersion"'
如果我将 ExpandConstant('{DotNetVersion}')
替换为 '5'
,函数 NetNotInstalled
可以正常工作,但我希望能够轻松地更改它,而无需修改超过定义的常量。
我不明白这里出了什么问题。 Inno Setup 文档声明此 应该 有效。
对任何其他函数使用相同的常量似乎可以完美地工作。
一个变量defined using Inno Setup preprocessor is not Inno Setup constant. Calling ExpandConstant
function对它没有影响。
扩展预处理器变量(或隐含任何 expression), you can use {#VariableOrExpression}
syntax. It's an inline preprocessor directive call, where, when no directive is explicitly specified, the 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?