当前位置: 首页 > 知识库问答 >
问题:

如何在Inno Setup中使用通配符递归地包含文件夹/文件

孙成化
2023-03-14

我想将我们构建的语言资源文件包含到安装程序中。语言资源文件都具有相同的名称,但位于不同的子文件夹中(每个区域设置一个),如下所示:

\Release
  \bin
    \es-MX
      Localization.resources.dll
    \fr-CA
      Localization.resources.dll
etc.

在我的[Files]部分,我想也许我可以做到这一点(注意星号的位置):

Source: "..\\source\\Libraries\\Localization\\bin\\Release\\*\\Localization.resources.dll"; \
    DestDir: "{app}\\MyApp"; Flags: ignoreversion recursesubdirs

不幸的是,Inno Setup爆炸了,抱怨它找不到任何文件:

编译器错误!
第129行:找不到与"C:\Develop\HT\Installers\…\Source\Libr的\Location\bin\Relance\*\Localization.resources.dll"匹配的文件

我希望Inno安装程序查找任何子文件夹(因此*),其中包含一个名为Localization.resources.dll的文件,并在安装时创建一个同名的语言目录(基于通过通配符找到的内容)并将文件复制到该文件夹,为符合条件的每个文件夹执行此操作。

本质上,我想以此结束:

..
  \MyApp
    \es-MX
      Localization.resources.dll
    \fr-CA
      Localization.resources.dll

如果不明显的话,我宁愿不要明确地添加源和目标文件夹名,因为我们将在未来添加更多的语言/地区,我希望Inno Setup自动选择我们创建的任何新的语言文件夹/文件,而不必改变安装程序源。

这可能吗?

共有1个答案

强才捷
2023-03-14

只需使用带有树的根路径和Localization.resources.dll文件名的recouresubdirs标志。它会自动执行您想要的操作:找到树中的所有Localization.resources.dll文件并将它们安装到各自的子文件夹中:

Source: "..\source\Libraries\Localization\bin\Release\Localization.resources.dll"; \
    DestDir: "{app}\MyApp"; Flags: ignoreversion recursesubdirs

根据记录(重点是我的):

递归子目录

指示编译器或安装程序也在源目录下的子目录中搜索源文件名/通配符。

其他可能的方法:

>

  • 使用预处理器生成Files部分。

    有关类似的任务,请参见:

    • Inno Setup-递归子目录而不创建相同的子目录
    • 以编程方式生成Inno安装文件标志
    • Inno Setup:为文件夹及其子文件夹中的所有文件动态添加组件

    使用外部脚本语言(具有比 Inno Setup 预处理器更好的功能)生成“文件”部分,并使用 Exec 预处理器函数调用它。例如,使用PowerShell。

  •  类似资料:
    • 问题内容: 如何基于通配符匹配递归地找到当前文件夹和子文件夹中的所有文件? 问题答案: 为此使用查找: 需要一个起点,(点)指向当前目录。

    • 我正在Eclipse中处理一个Java项目,该项目是使用Maven构建的。我使用的是一个旧项目中的一些循环代码,其中一个类在JAR的文件夹中查找一个具有特定名称的文件,然后解析该文件的文本。在这个特定的示例中,它查找一个具有Java接口名称的文件,然后从文件内部获取实现的类名。

    • 本文向大家介绍Java使用递归复制文件夹及文件夹,包括了Java使用递归复制文件夹及文件夹的使用技巧和注意事项,需要的朋友参考一下 递归调用copyDir方法实现,查询源文件目录使用字节输入流写入字节数组,如果目标文件目录没有就创建目录,如果迭代出是文件夹使用字节输出流对拷文件,直至源文件目录没有内容。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

    • 问题内容: 我正在使用Eclipse构建Java项目,该项目是使用Maven构建的。我使用的是旧项目中的一些再生代码,这些类之一在JAR文件夹中查找具有特定名称的文件,然后解析该文件的文本。在此特定示例中,它将查找具有Java接口名称的文件,然后从文件内部获取实现的类名称。 因此,基本上我想做的是 在JAR的“ META-INF / services”文件夹中包含一个文件名(X)和一行文本(Y)的

    • 我正在Eclipse中处理一个Java项目,该项目是使用Maven构建的。我使用的是一个旧项目中回收的代码,其中一个类在JAR的文件夹中查找具有特定名称的文件,然后解析该文件的文本。在这个特定的例子中,它查找一个名为Java接口的文件,然后从文件中获取实现的类名。 所以基本上,我要做的是在JAR的“META-INF/services”文件夹中包含一个文件,文件名为(X),一行文本为(Y)。我猜这应

    • 问题内容: 我想使用Java创建和删除目录,但是它不起作用。 问题答案: Java无法删除其中包含数据的文件夹。您必须先删除所有文件,然后再删除文件夹。 使用类似: 然后,您应该可以使用 Untested 删除文件夹!