Inno setup 以编程方式生成Inno安装文件标志

Inno setup 以编程方式生成Inno安装文件标志,inno-setup,Inno Setup,在Inno安装程序中,是否可以通过编程方式生成文件标志?我的安装程序源在一个相当大的目录结构中包含大量文件。目前,我已经通过一次添加整个文件夹来最小化脚本的复杂性。这很好,但是,在整个层次结构中分布着许多文件,它们没有从压缩中获益(例如.*.jpg),并且显著增加了安装程序的构建时间。理想情况下,我想做以下事情: Source: "{#MySrc}\*"; DestDir: "{#MyDst}"; Flags: {code:GetFlags}; 其中GetFlags将检查当前文件的扩展名,并对

在Inno安装程序中,是否可以通过编程方式生成文件标志?我的安装程序源在一个相当大的目录结构中包含大量文件。目前,我已经通过一次添加整个文件夹来最小化脚本的复杂性。这很好,但是,在整个层次结构中分布着许多文件,它们没有从压缩中获益(例如.*.jpg),并且显著增加了安装程序的构建时间。理想情况下,我想做以下事情:

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: