#define FindFolder(Path) \ Local[0] = FindFirst(Path, faDirectory), \ Local[0] ? AddBackslash(ExtractFileDir(Path)) + FindGetFileName(Local[0]) : Path赞:#include "{#FindFolder('..\..\..\packages\ScriptPreRequisites*')}\DotNetDependencies.iss"推荐答案在#中,您位于 Inno Setup预处理器.有两种进入预处理器领域的方法. There are two ways to enter preprocessor realm. 全行语法:Full line syntax:#directive args 和内联语法:And inline syntax:{#directive args}内联语法几乎专门用于 emit指令-{#emit <expression>}.因此,有一种简写格式,省略了emit:{#<expression>}.The inline syntax is almost exclusively used for emit directive - {#emit <expression>}. And for this reason there's a shorthand format, with the emit omitted: {#<expression>}.当您要在预处理器领域之外使用预处理器表达式时,内联语法很有用.就像在普通的Inno Setup部分(或Pascal脚本代码)中一样:The inline syntax is useful when you want to use preprocessor expression outside of preprocessor realm. Like in normal Inno Setup sections (or in Pascal Script code):[Files]Source: "{#FindFolder("..\packages\PackagesA*")}\*.*"; DestDir: "{app}"; \ flags: recursesubdirs 尽管在 #include预处理程序指令中,您已经在预处理器领域.在那里,{#xxx}语法无效(理论上它甚至可能具有不同的[valid]含义,但实际上大括号在预处理器中没有用).Though in #include preprocessor directive, you are already in the preprocessor realm. And there, the {#xxx} syntax is invalid (it might even have a different [valid] meaning theoretically, but actually curly brackets have no use in preprocessor). #include指令的语法为:#include <expression>预处理器使用类似C的表达式语法.因此,在这种情况下,您的表情是:The preprocessor uses C-like expression syntax. So your expression in this case is:FindFolder('..\..\..\packages\ScriptPreRequisites*') + '\DotNetDependencies.iss' 这篇关于为什么预处理器在#include指令中然后在[Files]部分的Inno Setup脚本中表现不同的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
10-10 06:16