能否将文件及生成的可执行文件复制至多个独立输出目录?
Inno Setup多输出目录实现方案
嘿,针对你提到的两个问题,我给你整理了具体的实现方法,都是Inno Setup里常用的实用技巧:
问题1:是否可将文件复制至不同的输出目录?
当然可以!虽然[Setup]段里的OutputDir只能指定一个主输出目录,但你可以通过**[Files]段的多规则配置**,把同一个文件同时复制到多个目标目录。
举个例子,假设你要把某个源文件同时放到主输出目录和C:\Users\admin\desktop\New,脚本可以这么写:
[Setup] OutputDir=C:\Users\admin\desktop [Files] ; 第一行:将文件复制到主输出目录({output}是指向OutputDir的内置常量) Source: "你的源文件完整路径"; DestDir: "{output}" ; 第二行:将同一个文件复制到第二个目标目录 Source: "你的源文件完整路径"; DestDir: "C:\Users\admin\desktop\New"
只要重复添加Source规则,就能把文件复制到任意多个你需要的目录里。
问题2:能否将生成的可执行文件复制到两个独立的输出文件夹?
这个要特殊处理一下——因为生成的安装包(比如MySetup.exe)默认只会输出到OutputDir指定的目录。要让它自动复制到第二个文件夹,你需要用到**[Code]段的编译后事件**,在安装包编译完成后触发复制操作。
示例脚本如下:
[Setup] OutputDir=C:\Users\admin\desktop OutputBaseFilename=MySetup ; 这里替换成你的安装包文件名 [Code] procedure PostBuild(Succeeded: Boolean); var SourceFile, TargetFile: string; begin // 只有当编译成功时才执行复制 if Succeeded then begin // 拼接源文件路径(主输出目录里的安装包) SourceFile := ExpandConstant('{Output}\{OutputBaseFilename}.exe'); // 拼接目标文件路径(第二个文件夹) TargetFile := 'C:\Users\admin\desktop\New\{OutputBaseFilename}.exe'; // 执行复制操作,如果失败弹出提示 if not FileCopy(SourceFile, TargetFile, False) then begin MsgBox('安装包复制到第二个目录失败!', mbError, MB_OK); end; end; end;
这样每次编译完安装包,程序都会自动把生成的.exe文件复制到你指定的第二个文件夹里,不用手动复制啦。
内容的提问来源于stack exchange,提问作者Francesco
相关产品推荐
相关产品推荐

