Inno设置 - 通配符和特定"来源"覆盖相同的文件 - 哪条指令优先?

时间:2017-05-28 12:57:43

标签: inno-setup

假设我有:

[Files]
Source: *.*; DestDir: {app}; Flags: recursesubdirs
Source: address.txt; DestDir: {app}; Flags: onlyifdoesntexist

哪个优先,是否定义了行为?我认为根据内部逻辑,两个覆盖的具体或最后列出,但如果他的行为被定义,那将是很好的。

如果它们都被执行(如答案所示),我将需要使用类似的东西:

[Files]
Source: *.*; DestDir: {app}; Flags: recursesubdirs; Excludes: "address.txt"
Source: address.txt; DestDir: {app}; Flags: onlyifdoesntexist

1 个答案:

答案 0 :(得分:1)

(几乎)没有什么特别的事情发生。

这两个规则按照定义顺序与任何其他规则一起处理。

  • 首先,address.txt由第一个掩码规则安装。

  • 然后处理第二个特定规则(但在这种特定情况下,由于onlyifdoesntexist标志,它不执行任何操作。)

2017-05-28 15:39:52.678   -- File entry --
2017-05-28 15:39:52.678   Dest filename: C:\Program Files\My Program\address.txt
2017-05-28 15:39:52.678   Time stamp of our file: 2017-05-28 15:39:20.000
2017-05-28 15:39:52.678   Installing the file.
2017-05-28 15:39:52.678   Successfully installed the file.
2017-05-28 15:39:52.678   -- File entry --
2017-05-28 15:39:52.678   Dest filename: C:\Program Files\My Program\address.txt
2017-05-28 15:39:52.678   Time stamp of our file: 2017-05-28 15:39:20.000
2017-05-28 15:39:52.678   Dest file exists.
2017-05-28 15:39:52.678   Skipping due to "onlyifdoesntexist" flag.

这两个规则发生的唯一特殊事情是,Inno Setup识别出同一个文件(address.txt)被引用了两次,因此它只将文件存储一次给安装程序。

您将在编译器输出中只看到address.txt的一条记录:

   Compressing: C:\source\address.txt

但是,任何引用同一文件的规则(甚至两个特定规则)都会发生这种情况。所以这不是关于通配符与特定规则的关系。

当您decompile the installer时,您将看到编码器实际上将通配符规则扩展为单个规则。

所以你有效地得到了这个:

[Files]
Source: "???\address.txt"; DestDir: "{app}"; MinVersion: 0.0,5.0; 
Source: "???\address.txt"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: onlyifdoesntexist