假设我有:
[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
答案 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