Inno setup 如何在Inno设置中使用通配符递归包含文件夹/文件

Inno setup 如何在Inno设置中使用通配符递归包含文件夹/文件,inno-setup,wildcard,Inno Setup,Wildcard,我想将我们构建的语言资源文件包含到我们的安装程序中。语言资源文件都具有相同的名称,但位于不同的子文件夹中(每个区域设置一个),如下所示: \Release \bin \es-MX Localization.resources.dll \fr-CA Localization.resources.dll etc. 在我的[文件]部分中,我想也许我可以做到这一点(注意星号的位置): 不幸的是,Inno安装程序崩溃,抱怨找不到任何文件: 编译器错误 第129

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

\Release
  \bin
    \es-MX
      Localization.resources.dll
    \fr-CA
      Localization.resources.dll
etc.
在我的
[文件]
部分中,我想也许我可以做到这一点(注意星号的位置):

不幸的是,Inno安装程序崩溃,抱怨找不到任何文件:

编译器错误
第129行:未找到与“C:\Development\HT\Installers\..\source\Libraries\Localization\bin\Release\*\Localization.resources.dll”匹配的文件

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

基本上,我想以这样的方式结束:

..
  \MyApp
    \es-MX
      Localization.resources.dll
    \fr-CA
      Localization.resources.dll
如果不明显,我不希望显式添加源文件夹和目标文件夹名称,因为将来我们将添加更多语言/区域设置,并且我希望Inno安装程序能够自动拾取我们创建的任何新语言文件夹/文件,而无需更改安装程序源

这可能吗?

只需使用带有树的根路径和
本地化.resources.dll
文件名的。它将自动执行您想要的操作:在树中查找所有
本地化.resources.dll
文件,并将它们安装到各自的子文件夹中:

Source: "..\source\Libraries\Localization\bin\Release\Localization.resources.dll"; \
    DestDir: "{app}\MyApp"; Flags: ignoreversion recursesubdirs
As(我的重点):

递归subdirs

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


其他可能的办法:

  • 使用预处理器生成
    文件
    部分

    有关类似任务的详细信息,请参见:

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


您需要
createallsubdirs recursesubdirs
标志。例如:
Source:“C:\SourceDir\*”;DestDir:“{app}”;Flags:ignoreversion createallsubdirs recursesubdirs
谢谢,但我不希望包含所有子文件夹并将其复制到目标--仅包含符合条件的子文件夹(包含具有指定名称的文件)。源路径中有许多我不想包含的子文件夹。我解决了这个问题,从只有语言资源文件夹的其他位置获取所需文件,然后使用“*”从该位置获取所有内容。
Source: "..\source\Libraries\Localization\bin\Release\Localization.resources.dll"; \
    DestDir: "{app}\MyApp"; Flags: ignoreversion recursesubdirs