2016-12-02 15 views
3

Я хочу включить файлы языковых ресурсов из нашей сборки в наши установщики. Язык файлы ресурсов все имеют одинаковые имена, но находятся в разных подпапках (по одному на местность), как это:Как рекурсивно включить папку/файлы с помощью шаблона в Inno Setup

\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 взрывает, жалуясь, что он не может найти любые файлы:

Ошибка компилятора!
Строка 129: файлы не найдено соответствий запросу "C: \ Разработка \ HT \ установщиков \ .. \ источник \ Библиотеки \ Localization \ Bin \ Release \ * \ Localization.resources.dll"

Я хотел Inno Setup для поиска любой подпапки (следовательно, *), содержащей файл с именем Localization.resources.dll и после установки создайте языковой каталог с тем же именем (на основе того, что найден через подстановочный знак) и скопируйте файл в эту папку для каждой папки, соответствующей критериям.

По существу, я хочу закончить с этим:

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

В случае это не очевидно, я предпочел бы не явно добавлять имена источника и папки назначения, потому что мы будем добавлять больше языков/locales в будущем, и я бы хотел, чтобы Inno Setup автоматически забирала любые новые языковые папки/файлы, которые мы создаем, не меняя исходный код установщика.

Возможно ли это?

+0

Вам нужны флаги 'createallsubdirs recursesubdirs'. Например: «Источник:« C: \ SourceDir \ * »; DestDir: "{app}"; Флаги: ignoreversion createallsubdirs recursesubdirs' – RobeN

+0

Спасибо, но я не хочу, чтобы * все * подпапки были включены и скопированы в папку назначения - только подпапки, соответствующие критериям (содержащим файл с указанным именем). В исходном пути есть много подпапок, которые я не хочу включать. –

+0

Я работал над проблемой, хватая нужные файлы из другого места, в котором есть только языковые папки ресурсов, а затем с помощью '*', чтобы получить все из этого места. –

ответ

2

Просто используйте 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

Поручает компилятору или установке также выполнить поиск для Источник filename/wildcard в подкаталогах в каталоге источника.


Другие возможные подходы: