我正在尝试设置一个安装文件(可选)安装 .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”'
如果我将
NetNotInstalled
替换为 ExpandConstant('{DotNetVersion}')
,则函数 '5'
可以正常工作,但我希望能够轻松更改此设置,而无需修改超过定义的常量。
我不明白这里出了什么问题。 Inno Setup 文档指出这应该是有效的。
对任何其他函数使用相同的常数似乎可以完美地工作。
使用 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"