Inno Setup编译器执行预处理器Exec()失败时可否中止编译?
解决方法
你可以通过判断Exec()的返回值,主动触发编译错误来实现中止逻辑,具体有两种常用写法:
写法1:明确检查退出码,输出详细错误信息
// 执行批处理并获取返回值 #dim BuildResult = Exec("\build.bat", null, null, 1) // 批处理执行成功默认返回0,返回非0代表执行失败;Exec无法启动进程时会返回-1 #if BuildResult != 0 #error 前置脚本build.bat执行失败,退出码:{#BuildResult},编译中止 #endif
写法2:精简一行写法,利用预处理器Abort函数
#expr Exec("\build.bat", null, null, 1) != 0 ? Abort("build.bat执行失败,中止编译") : 0
相关说明
- 你之前直接写
#expr Exec(...)时,预处理器仅执行了函数调用、没有处理返回值,所以执行错误不会被捕获 Exec的返回值规则:- 无法启动目标程序时返回
-1 - 成功启动并等待程序退出后,返回程序的退出码(常规脚本/程序执行成功返回0,失败返回非0)
- 无法启动目标程序时返回
内容的提问来源于stack exchange,提问作者Aaron Cicali
相关产品推荐
相关产品推荐

