在使用宏搜索和查找文件时,试图理解包含另一个脚本文件的语法与Inno Setup脚本中的源文件之间的区别。
我试着在Inno Setup中使用通配符查找目录中的FindFolder
函数:
#define FindFolder(Path)
Local[0] = FindFirst(Path, faDirectory),
Local[0] ? AddBackslash(ExtractFileDir(Path)) + FindGetFileName(Local[0]) : Path
像这样:
#include "{#FindFolder('......packagesScriptPreRequisites*')}DotNetDependencies.iss"
在#
中,您处于Inno Setup预处理器的"领域"。
有两种方法可以进入预处理器领域。
-
整行语法:
#directive args
-
和内联语法:
{#directive args}
内联语法几乎只用于
emit
指令-{#emit <expression>}
。出于这个原因,有一种省略了emit
的简写格式:{#<expression>}
。
当您希望在预处理器领域之外使用预处理器表达式时,内联语法非常有用。类似于正常的Inno设置部分(或Pascal脚本代码(:
[Files]
Source: "{#FindFolder("..packagesPackagesA*")}*.*"; DestDir: "{app}";
flags: recursesubdirs
尽管在#include
预处理器指令中,您已经进入了预处理器领域。在那里,{#xxx}
语法是无效的(理论上它甚至可能有不同的[valid]含义,但实际上花括号在预处理器中没有用处(。
#include
指令的语法为:
#include <expression>
预处理器使用类似C的表达式语法。因此,在这种情况下,您的表达式是:
FindFolder('......packagesScriptPreRequisites*') + 'DotNetDependencies.iss'