You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译后删除包含文件,Inno Setup为何仍报「无法打开包含文件」警告?

Inno Setup编译时删除包含文件后出现警告的原因及解决办法

问题原因

Inno Setup的编译流程分为预处理器处理和主编译两个核心阶段:

  • 预处理器执行#include时,会把目标文件的内容插入到脚本对应位置,但同时会记录这个包含文件的路径,用于后续的依赖检查、增量编译验证等步骤。
  • 你在#include后立刻用#expr DeleteFile删除了临时文件,当主编译阶段尝试访问这个已被记录的包含文件时,就会因文件不存在触发警告。简单说,不是处理完文件列表后还要打开,而是编译流程的后续步骤需要验证这个文件的存在性。

解决办法

方法1:替换#include为#emit + LoadStringFromFile

使用预处理器的LoadStringFromFile函数读取临时文件内容,再通过#emit直接输出到脚本中。这种方式不会让Inno Setup记录原文件的引用,后续编译步骤不会再尝试访问它。修改后的脚本如下:

[Setup]
AppName=InnoTest
AppVerName=InnoTest
DefaultDirName={commonpf}\InnoTest

[Files]
#define TempFile SourcePath+'TempFileList.txt'
#emit LoadStringFromFile(TempFile)
#expr DeleteFile(TempFile)

方法2:延迟删除临时文件

不在脚本内删除临时文件,而是通过外部脚本控制编译流程:

  1. 先生成TempFileList.txt
  2. 调用Inno Setup编译脚本
  3. 编译完成后再删除TempFileList.txt

比如用批处理脚本:

@echo off
rem 生成临时文件列表
echo Source: "D:\foo\test.DE"; DestDir: "{app}"; Flags: ignoreversion > TempFileList.txt
echo Source: "D:\foo\test.ES"; DestDir: "{app}"; Flags: ignoreversion >> TempFileList.txt

rem 调用Inno Setup编译
ISCC.exe "你的脚本文件名.iss"

rem 删除临时文件
del TempFileList.txt

内容的提问来源于stack exchange,提问作者ralfiii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:35:17