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

问题描述 投票:0回答:1

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

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

用例: 基本上,我们已经开始在内部开发项目中使用 NuGet 包。因此,每个项目都会创建一个 NuGet 包,可供其他项目和/或开发人员使用。

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

例如,我们需要找到匹配

"../packages/PackagesA.../"
的包文件夹,例如
"PackageA v1.2.0"

遇到了这个如何在 Inno Setup 安装程序中捆绑来自 NuGet 包的仅运行时依赖项?,这几乎正是我想要的,但似乎代码在我的 Inno 脚本中不起作用。

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

nuget installation inno-setup nuget-package
1个回答
1
投票

您可以定义一个 Inno Setup 预处理器 函数来解析目录文件掩码。使用

FindFirst
函数 来实现:

#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  

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

© www.soinside.com 2019 - 2024. All rights reserved.