当前位置: 首页 > 知识库问答 >
问题:

Inno安装:如何在#错误指令消息中扩展预处理器变量

凌长恨
2023-03-14

我有一个Inno安装脚本,它将文件作为预处理器步骤查找:

#define a_path GetEnv("INSTALLER_FILES")
#define install_file FindFirst(a_path + "\pattern*.*")

当找不到install_file时,我想发出一个错误:

#if install_file == 0
    #error No installer found at {#a_path}
#endif

但是ISPP只在编译时写文字源代码行:

剧本iss:[ISPP]在{#a_path}处找不到安装程序

是否可以在#error指令中扩展预处理器变量?

共有1个答案

钱和平
2023-03-14

#error 指令的参数不能包含变量。

但是您可以改用#Pragma错误指令:

#pragma error "No installer found at " + a_path
 类似资料:
  • 当使用Inno Setup预处理器生成多行输出时,例如我的这些回答: Inno Setup-递归子目录而不创建相同的子目录 将多个源代码行添加到Inno File部分的函数 以编程方式生成Inno安装文件标志 Inno Setup:为文件夹及其子文件夹中的所有文件动态添加组件 在所有文件的源路径之间进行选择 我总是必须使用< code>#pragma parseroption指令切换到C风格的字符

  • 主要内容:C# 中的预处理器指令,#define 预处理器,条件指令预处理指令的作用主要是向编译器发出指令,以便在程序编译开始之前对信息进行一些预处理操作。在 C# 中,预处理器指令均以 开头,并且预处理器指令之前只能出现空格不能出现任何代码。另外,预处理器指令不是语句,因此它们不需要以分号 结尾。 在 C# 中,预处理指令用于帮助条件编译。不同于 C 和 C++ 中的指令,在 C# 中不能使用这些指令来创建宏,而且预处理器指令必须是一行中唯一的代码,不能掺杂其它

  • 问题内容: 我已从提供回调来跟踪提交给的任务的执行。 现在,我看到的是任务是否已提交,但最终进入队列,并且任务仍被调用(方法仍然被调用),并且(可能)检查任务已取消且未调用包装的可调用对象。 我应该做例如 还是应该打电话给我?在检查取消和对其进行任何操作之间,这两种方法似乎都容易受到比赛条件的影响。 问题答案: 您说对了,那是对的。系统 最多 会调用 一次 ,因此如果任务在通过运行之前已被取消,您

  • 预处理程序指令指示编译器在实际编译开始之前预处理信息。 所有预处理程序指令都以#开头,并且只有空格字符可能出现在一行上的预处理程序指令之前。 预处理程序指令不是语句,因此它们不以分号(;)结尾。 C#编译器没有单独的预处理器; 但是,指令的处理就像有一个指令一样。 在C#中,预处理程序指令用于帮助进行条件编译。 与C和C ++指令不同,它们不用于创建宏。 预处理程序指令必须是一行上的唯一指令。 C

  •  TJS2 可以对 条件编译表达式 ( 相当于 C 中的 #if 和 #endif 的东西 ) 进行处理。也就是说,可以在脚本(script)被实际执行之前进行处理,依照条件只解释脚本中想要解释的一部分,而对其他部分不进行解释。  件编译表达式的书写风格和 C 中的预处理指令不同,是在哪里都能写的自由风格。并不是像 C 中那样每行只能写一条指令。 @set 指令  @set 指令会对条件编译表达式