在Inno Setup中使用通配符查找目录

时间:2018-12-13 11:36:31

标签: nuget installer inno-setup nuget-package

我正在尝试在Inno Setup脚本的目录名称内使用通配符时递归获取目录中的所有文件。

我碰到过有关文件名的示例,但没有关于目录搜索的示例。

用例: 基本上,我们已经将NuGet软件包用于内部开发项目。因此,每个项目都制作一个NuGet包,其他项目和/或开发人员可以使用它。

其中一部分,我们希望使用Inno Setup来使用NuGet包中的dll和/或文件。

例如,我们需要找到与 - url: "http://st4ple.github.io" + url: "http://cerbospace.github.io" 匹配的包文件夹,例如"../packages/PackagesA.../"

与此How to bundle run-time-only dependencies from NuGet packages in Inno Setup installer?相似,这几乎是我想要的,但是该代码似乎在我的Inno脚本中不起作用。

对如何解决此问题有任何帮助或建议吗?

1 个答案:

答案 0 :(得分:1)

您可以定义一个Inno Setup preprocessor函数来解析目录文件掩码。为此使用FindFirst function

#define FindFolder(Path) \
    Local[0] = FindFirst(Path, faDirectory), \
    Local[0] ? AddBackslash(ExtractFileDir(Path)) + FindGetFileName(Local[0]) : Path

[Files]
Source: "{#FindFolder("..\packages\PackagesA*")}\*.*"; DestDir: "{app}"; \
    flags: recursesubdirs  

如果在脚本末尾添加SaveToFile调用:

#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")

...您将看到上面的代码解析为:

[Files]
Source: "..\packages\PackageA1.2.0\*.*"; DestDir: "{app}"; flags: recursesubdirs  

如果找不到此类文件夹,则代码解析为:

[Files]
Source: "..\packages\PackageA*\*.*"; DestDir: "{app}"; flags: recursesubdirs  

...,然后编译器将失败,并显示“找不到与...匹配的文件”。