我想将我们构建中的语言资源文件包含到我们的安装程序中。语言资源文件都具有相同的名称,但位于不同的子文件夹中(每个区域设置一个),如下所示:
\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 崩溃了,提示找不到任何文件:
Compiler Error!
Line 129: No files found matching "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 自动选择任何新的语言文件夹/我们创建的文件而无需更改安装程序源。
这可能吗?
最佳答案
只需使用 recursesubdirs
flag具有到树的根路径和 Localization.resources.dll
文档名称。它会自动执行您想要的操作:查找所有 Localization.resources.dll
树中的文件并将它们安装到各自的子文件夹中:
Source: "..\source\Libraries\Localization\bin\Release\Localization.resources.dll"; \
DestDir: "{app}\MyApp"; Flags: ignoreversion recursesubdirs
如 documented (强调我的):recursesubdirs
Instructs the compiler or Setup to also search for the Source filename/wildcard in subdirectories under the Source directory.
其他可能的方法:
Files
部分使用预处理器。对于类似的任务,请参阅:
Files
部分使用外部脚本语言(具有比 Inno Setup 预处理器更好的功能)并使用 Exec
preprocessor function 调用它.例如。使用 PowerShell。关于inno-setup - 如何在 Inno Setup 中使用通配符递归包含文件夹/文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40941667/