Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inno setup Inno设置-通配符和特定“;资料来源;覆盖同一文件-哪个指令优先?_Inno Setup - Fatal编程技术网

Inno setup Inno设置-通配符和特定“;资料来源;覆盖同一文件-哪个指令优先?

Inno setup Inno设置-通配符和特定“;资料来源;覆盖同一文件-哪个指令优先?,inno-setup,Inno Setup,假设我有: [Files] Source: *.*; DestDir: {app}; Flags: recursesubdirs Source: address.txt; DestDir: {app}; Flags: onlyifdoesntexist 哪个优先,行为是否已定义?我认为这两个覆盖的具体列表或最后一个列表取决于内部逻辑,但如果定义了他的行为就更好了 如果它们都被执行(如答案所示),我将需要使用类似以下内容: [Files] Source: *.*; DestDir: {app}

假设我有:

[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
(几乎)没有什么特别的事情发生

这两个规则都按照定义顺序进行处理,与任何其他规则一样

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

  • 然后处理第二个特定规则(但在这种特定情况下,由于
    onlyifdeesntexist
    标志,它什么也不做)

2017-05-28 15:39:52.678——文件输入--
2017-05-28 15:39:52.678目标文件名:C:\Program Files\My Program\address.txt
2017-05-28 15:39:52.678我们文件的时间戳:2017-05-28 15:39:20.000
2017-05-28 15:39:52.678安装文件。
2017-05-28 15:39:52.678已成功安装该文件。
2017-05-28 15:39:52.678——文件输入--
2017-05-28 15:39:52.678目标文件名:C:\Program Files\My Program\address.txt
2017-05-28 15:39:52.678我们文件的时间戳:2017-05-28 15:39:20.000
2017-05-28 15:39:52.678目标文件已存在。
2017-05-28 15:39:52.678由于“onlyifdoesntexist”标志而跳绳。

这两条规则唯一的特殊之处是,Inno安装程序识别同一个文件(
address.txt
)被引用了两次,因此它只向安装程序存储一次该文件

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

   Compressing: C:\source\address.txt
但任何规则(甚至两个特定规则)引用同一个文件时都会发生这种情况。所以这不是通配符与特定规则的关系


您将看到,编译器实际上将通配符规则扩展为单个规则

所以你可以有效地得到:

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

谢谢-我将尝试使用excludes进行实验,然后将答案标记为correct later是的,如果您需要对特定文件进行特殊处理,则需要
excludes
参数。我已经在我的答案中添加了更多的信息。谢谢-我正在努力让它工作。目前Inno-Seup编译器报告它在源代码中没有重新格式化“排除”:..\..\compiled\data\quick list*;DestDir:{app}\data\quick list;标志:递归subdirs;不包括“address.txt”;来源:..\..\compiled\data\quick list\address.txt;DestDir:{app}\data\quick list;旗帜:仅限外国纺织商;
Excludes: