试图理解使用宏搜索和查找文件时在Inno Setup脚本中包含另一个脚本文件和源文件的语法之间的区别。
我尝试使用Find a directory using wildcard in Inno Setup中的FindFolder
函数:
#define FindFolder(Path) \
Local[0] = FindFirst(Path, faDirectory), \
Local[0] ? AddBackslash(ExtractFileDir(Path)) + FindGetFileName(Local[0]) : Path
赞:
#include "{#FindFolder('..\..\..\packages\ScriptPreRequisites*')}\DotNetDependencies.iss"
答案 0 :(得分:1)
在#
中,您处于Inno Setup preprocessor的“领域”中。
有两种进入预处理器领域的方法。
全行语法:
#directive args
和内联语法:
{#directive args}
内联语法几乎专门用于emit
directive-{#emit <expression>}
。因此,存在一种简写格式,省略了emit
:{#<expression>}
。
当您要在预处理器领域之外使用预处理器表达式时,内联语法很有用。就像在普通的Inno Setup部分(或Pascal脚本代码)中一样:
[Files]
Source: "{#FindFolder("..\packages\PackagesA*")}\*.*"; DestDir: "{app}"; \
flags: recursesubdirs
尽管在#include
preprocessor directive中,您已经处在预处理器领域。而且,{#xxx}
语法是无效的(理论上它甚至可能具有不同的[valid]含义,但实际上大括号在预处理器中没有用)。
#include
指令的语法为:
#include <expression>
预处理器使用类似C的expression syntax。因此,在这种情况下,您的表情是:
FindFolder('..\..\..\packages\ScriptPreRequisites*') + '\DotNetDependencies.iss'