Inno Setup,在安装程序中不要多次包含重复文件

时间:2017-12-05 08:47:02

标签: inno-setup

我有一个包含多个项目的.NET解决方案。每个项目都有自己的输出文件夹(project1到projectN)。所有项目都有公共文件,这些文件由msbuild处理到每个文件夹。 (这是正常的)。公共文件具有完全相同的名称,修改时间和内容。公共文件大约占每个项目总大小的90%。

我想用Inno Setup / Inno Script Studio创建一个安装程序 每个项目都有自己的组件。 (可以在安装期间选择)

我的文件看起来像是:

Source: "{#BuildOutputDirectory}_project1\*"; Excludes: "*.pdb,*.xml"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs; Components: project1
Source: "{#BuildOutputDirectory}_project2\*"; Excludes: "*.pdb,*.xml"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs; Components: project2
...
Source: "{#BuildOutputDirectory}_projectN\*"; Excludes: "*.pdb,*.xml"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs; Components: projectN

我的问题是重复文件多次包含在安装程序中。 projects文件夹的总大小为517MB,uniqe文件的大小为78MB,安装程序大小为98MB(压缩lzma2实体)。预期的安装程序大小应该是大约21MB(我用7-Zip压缩了唯一的文件,结果就是这个)

安装创建时间很长,因为它会多次压缩重复文件。但这不是一个真正的问题。

如何过滤重复文件? (我有一个想法,用一个已经过滤它们的简单应用程序生成iss文件,但它只是一种解决方法)

1 个答案:

答案 0 :(得分:0)

  

我有一个想法,用一个已经过滤它们的简单应用程序生成iss文件,但它只是一个解决方法

没有更好的解决方案。

考虑从Inno Setup预处理器(使用Exec preprocessor function)调用应用程序(或者更简单的[PowerShell?]脚本)。这样.iss就可以独立工作,而无需在编译安装程序之前运行应用程序/脚本。

实际上,您可以完全在Inno Setup预处理器中实现它,而无需外部应用程序/脚本。但是在预处理器中对此进行编码并不容易。

请参阅Can this installer be compacted by reducing the DLLs included in the script?

对于其他类似任务,请参阅: