如何在编译设置时创建多个 zip 存档
Posted
技术标签:
【中文标题】如何在编译设置时创建多个 zip 存档【英文标题】:How to create multiple zip archives while compiling setup 【发布时间】:2013-01-29 09:25:03 【问题描述】:我有一个 Inno-Setup,它在内部只是启动另一个设置。 (我想用 InnoSetup 完全重建它,但还没有时间。)
要运行此内部设置,我需要提供一些 zip 文件。目前我手动创建这些 zip 文件并将它们复制到我的 InnoSetup-Folder 中。 我的想法是,让 InnoSetup 编译过程创建这些 zip 文件。所需文件位于不同(但固定)的文件夹中。
有没有办法这样做?
这里有一个更直观的例子:
C:\dir1\File1 C:\dir2\File2 C:\dir3\File3 C:\dir4\File4 C:\dir5\File5 C:\dir6\File6 Zip1 包含 File1 和 File2 Zip2 包含 File3 和 File4 Zip3 包含 File5 和 File6当前进程
Zip1 - 3 是手动构建的 所有三个 zip 文件将被编译成一个完整的 InnoSetup .exe 文件 运行安装时,压缩文件将被复制到临时文件夹 外部设置工具将对临时文件夹中的这些 zip 文件起作用。所需过程
Zip1 - 3 由 InnoSetup 自动构建 其余与当前进程相同感谢您的建议
【问题讨论】:
这完全可以通过预处理器完成。如果您的 zip 存档器支持用于创建存档的命令行选项,那么您可以简单地使用Exec
预处理器功能,如果没有,那么是时候更改存档器了 :-) 您正在使用哪个存档器(让我们编写更具体的如果可能的话回答)?
我正在使用 TUGZip。我不喜欢它,但它是唯一一家被广泛接受的公司。
它非常奇特(尽管它使用 InnoSetup 进行自己的安装),但看起来,TzScript.exe
可能会更轻松地满足您的需求。查看TUGZip
帮助文件中的Scripting
部分。它会让你有机会为你的文件压缩制作一个脚本文件,你可以通过Exec
函数从 InnoSetup 预处理器(在编译开始之前)调用这个TzScript.exe
命令行工具。完成压缩后,您可以获取这些新存档并使用 CopyFile
将它们复制到某个文件夹。
尝试将其构建到 Inno 设置中将比仅在本机进行更容易出错和脆弱。而且这需要更长的时间:)
非常感谢。 TUGZip 帮助文件非常好。我创建了一个简短的脚本来创建所有的 zip 文件。之后我可以像以前一样编译我的设置。
【参考方案1】:
如何使用 TUGZip 将文件添加到存档中?
您正在使用非常奇特但对脚本友好的存档器。简而言之,您可以为存档器的TzScript.exe
命令行工具制作一个脚本文件,如下所示。为Archive
属性分配存档的目标名称,使用正确的WorkingDir
和Data
放置要添加到存档的文件。我已经硬编码了存档名称,但即使是这个脚本文件也可以由 InnoSetup 预处理器制作(但这超出了这个问题的范围):
function main()
var Comp = new Compress();
Comp.Archive = "d:\\DeployFolder\\Archives\\Archive1.zip";
Comp.Type = "ZIP";
Comp.Compression = 3;
Comp.WorkingDir = "d:\\ArchiveFolder\\";
Comp.Data = "File1.txt,File2.txt";
Comp.Password = "";
Comp.DateExtension = 0;
Comp.TimeExtension = 0;
Comp.Overwrite = 1;
Comp.Recurse = 0;
Comp.StoreFolderNames = 1;
Comp.IncludeHiddenFiles = 1;
Comp.DoCompress();
如何在 InnoSetup 脚本编译前执行 TUGZip 命令行归档器?
比将它放入 InnoSetup 脚本更容易的是制作一个批处理文件,它可以使用存档器完成所有工作,并且在完成复制到部署文件夹中的全新存档后,它将开始 InnoSetup 编译或只是打开 InnoSetup 脚本文件。
如果您想在 InnoSetup 脚本中使用它,则需要使用预处理器的 Exec
函数。由于它是一个预处理器函数,它在 InnoSetup 脚本编译开始之前执行,因此它是您可以执行此类操作的理想场所。
【讨论】:
以上是关于如何在编译设置时创建多个 zip 存档的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Java 将每个文件存储在 zip 存档中的数组中?