Inno setup 以编程方式生成Inno安装文件标志
在Inno安装程序中,是否可以通过编程方式生成文件标志?我的安装程序源在一个相当大的目录结构中包含大量文件。目前,我已经通过一次添加整个文件夹来最小化脚本的复杂性。这很好,但是,在整个层次结构中分布着许多文件,它们没有从压缩中获益(例如.*.jpg),并且显著增加了安装程序的构建时间。理想情况下,我想做以下事情:Inno setup 以编程方式生成Inno安装文件标志,inno-setup,Inno Setup,在Inno安装程序中,是否可以通过编程方式生成文件标志?我的安装程序源在一个相当大的目录结构中包含大量文件。目前,我已经通过一次添加整个文件夹来最小化脚本的复杂性。这很好,但是,在整个层次结构中分布着许多文件,它们没有从压缩中获益(例如.*.jpg),并且显著增加了安装程序的构建时间。理想情况下,我想做以下事情: Source: "{#MySrc}\*"; DestDir: "{#MyDst}"; Flags: {code:GetFlags}; 其中GetFlags将检查当前文件的扩展名,并对
Source: "{#MySrc}\*"; DestDir: "{#MyDst}"; Flags: {code:GetFlags};
其中GetFlags将检查当前文件的扩展名,并对我不想压缩的文件类型返回“nocompression”。可能吗?我似乎在文档或在线上找不到任何能表明这一点的东西。如果没有,是否有其他直接的方法来实现这一点
我能想到的唯一其他方法是为每种类型创建一个额外的文件行,如下所示
Source: "{#MySrc}\*"; DestDir: "{#MyDst}"; Excludes: "*.jpg,*.dds"; Flags: "ignoreversion recursesubdirs";
Source: "{#MySrc}\*.jpg"; DestDir: "{#MyDst}"; Flags: "ignoreversion recursesubdirs nocompression";
Source: "{#MySrc}\*.dds"; DestDir: "{#MyDst}"; Flags: "ignoreversion recursesubdirs nocompression";
虽然这是可行的,但每次遇到决定不压缩的文件类型时,我都需要在几个地方进行更改。因此,如果可能的话,我宁愿把逻辑放在一个地方。你的解决方案不错。如果您提供详细信息,我们可能会帮助您找到不需要“每次在多个地方进行更改”的解决方案
无论如何,可以使用生成
[文件]
部分。通过这种方式,您可以更改每个文件类型的标志。但代码也很复杂。由于预处理器的限制,它不能处理真正大的目录结构(我已经设法使它可以处理多达3500个文件)
根据需要修改FileFlags
宏。并使用ProcessFolder
宏,如:
[Files]
#emit ProcessFolder(MySrc, MyDst)
它将生成如下代码:
Source: "C:\source\file.txt"; DestDir: "{app}"; Flags:
Source: "C:\source\subfolder\file.jpg"; DestDir: "{app}\subfolder"; Flags: nocompression
Source: "C:\source\subfolder\another.txt"; DestDir: "{app}\subfolder"; Flags:
(使用MySrc
=C:\source
和MyDst
={app}
)
看
受to的启发。非常有用。谢谢
Source: "C:\source\file.txt"; DestDir: "{app}"; Flags:
Source: "C:\source\subfolder\file.jpg"; DestDir: "{app}\subfolder"; Flags: nocompression
Source: "C:\source\subfolder\another.txt"; DestDir: "{app}\subfolder"; Flags: