gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:29:07 25 4
gpt4 key购买 nike

我正在尝试设置一个安装文件,如果尚未安装 .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"'

Error box stating: 'Internal error: Unknown constant "DotNetVersion"'

如果我将 ExpandConstant('{DotNetVersion}') 替换为 '5',函数 NetNotInstalled 将正常工作,但我想轻松地能够在不修改超过定义的常量的情况下更改它。

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

最佳答案

一个变量 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?

关于inno-setup - 在 ExpandConstant 中无法识别使用 Inno Setup 预处理器 #define 定义的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68046461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com