📑 本文导航
核心区分:recursesubdirs标志控制是否递归子文件夹

一、关键标志说明
- recursesubdirs 开启:递归遍历所有子目录,把子文件夹内文件一并打包、保留目录结构关闭(默认):只复制当前层级文件,忽略所有子文件夹
- createallsubdirs(配合 recursesubdirs 使用) 强制创建空的子目录;不加则只会生成有文件的文件夹jrsoftware.org
- ignoreversion:通用,忽略文件版本、强制覆盖
二、1. 包含全部子目录(递归复制,保留目录结构)
示例 1:打包整个目录(含所有子文件夹)
iss
[Files] ; 源目录下所有文件+所有子目录,完整复制到安装目录{app} Source: "app_src\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs - recursesubdirs:读取所有子文件夹文件
- createallsubdirs:安装时原样创建所有子文件夹(含空文件夹)
示例 2:单独打包资源文件夹(带子目录)
iss
; 源res文件夹及内部所有子目录,释放到{app}\res Source: "res\*"; DestDir: "{app}\res"; Flags: ignoreversion recursesubdirs createallsubdirs 三、2. 不包含子目录(仅复制当前层级文件,忽略子文件夹)
不要加 recursesubdirs,默认只取一级文件
示例 1:只复制根目录所有文件,跳过子文件夹
iss
[Files] ; 仅 app_src 根目录文件,子文件夹全部忽略 Source: "app_src\*"; DestDir: "{app}"; Flags: ignoreversion 示例 2:只复制指定后缀一级文件(不进子目录)
iss
; 仅根目录exe、dll,子文件夹里的exe/dll不会打包 Source: "bin\*.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "bin\*.dll"; DestDir: "{app}"; Flags: ignoreversion 四、混合场景:部分文件夹递归、部分只取一级
iss
[Files] ; 1. 主程序根目录文件,不包含子文件夹 Source: "publish\*.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "publish\*.json"; DestDir: "{app}"; Flags: ignoreversion ; 2. 资源文件夹需要完整子目录结构 Source: "publish\static\*"; DestDir: "{app}\static"; Flags: ignoreversion recursesubdirs createallsubdirs 五、常见踩坑
- 只写Source: “folder”(不带\*) 只会复制文件夹本身,不会复制里面任何文件,必须加\*
- 只用 recursesubdirs 不加 createallsubdirs 空的子目录安装后不会生成,只有带文件的文件夹才创建
- 想只复制一级,但误加 recursesubdirs 会把深层所有文件全部释放,目录层级错乱
六、最简对比模板
iss
[Files] Source: "src\*"; DestDir: "{app}"; Flags: ignoreversion Source: "src\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs