【问题标题】:How to recursivelly include folder/files using a wildcard in Inno Setup如何在 Inno Setup 中使用通配符递归地包含文件夹/文件
【发布时间】:2017-04-17 22:08:30
【问题描述】:

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

\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:\Development\HT\Installers\..\source\Libraries\Localization\bin\Release\*\Localization.resources.dll”匹配的文件

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

基本上,我想这样结束:

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

如果不是很明显,我不希望显式添加源和目标文件夹名称,因为我们将来会添加更多语言/区域设置,我希望 Inno Setup 自动选择任何新的我们创建的语言文件夹/文件,无需更改安装程序源。

这可能吗?

【问题讨论】:

  • 您需要createallsubdirs recursesubdirs 标志。例如:Source: "C:\SourceDir\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs
  • 谢谢,但我不希望 all 子文件夹被包含并复制到目标 - 只包含符合条件的子文件夹(包含一个文件指定的名称)。源路径中有很多我不想包含的子文件夹。
  • 我已经解决了这个问题,方法是从只有语言资源文件夹的不同位置获取所需文件,然后使用“*”从该位置获取所有内容。

标签: inno-setup wildcard


【解决方案1】:

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

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

作为documented(强调我的):

递归子目录

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


其他可能的方法:

【讨论】:

    猜你喜欢
    • 2019-09-19
    • 2014-01-14
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多