我试图在 Inno Setup 脚本中的目录名称中使用通配符时递归地获取目录中的所有文件。
我遇到过文件名的示例,但没有遇到过目录搜索的示例。
用例: 基本上,我们已经开始在内部开发项目中使用 NuGet 包。因此,每个项目都会创建一个 NuGet 包,可供其他项目和/或开发人员使用。
我们希望使用 Inno Setup 来使用 NuGet 包中的 dll 和/或文件。
例如,我们需要找到匹配
"../packages/PackagesA.../"
的包文件夹,例如"PackageA v1.2.0"
。
遇到了这个如何在 Inno Setup 安装程序中捆绑来自 NuGet 包的仅运行时依赖项?,这几乎正是我想要的,但似乎代码在我的 Inno 脚本中不起作用。
对于如何解决这个问题有任何帮助或建议吗?
您可以定义一个 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
...然后编译器将失败,并显示 “找不到匹配的文件...”。