Найти каталог с помощью подстановочного знака в Inno Setup - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь получить все файлы в каталоге рекурсивно, используя подстановочный знак в имени каталога в сценарии установки Inno.

Я встречал примеры для имени файла, но ни одного для поиска в каталоге.

Вариант использования: По сути, мы перешли к использованию пакетов NuGet для наших внутренних проектов разработки.Таким образом, каждый проект создает пакет NuGet, который может использоваться другим проектом и / или разработчиком.

Часть этого мы хотим использовать Inno Setup для использования dll и / или файлов из пакета NuGet.

Например, нам нужно найти папку пакета, соответствующую "../packages/PackagesA.../",например, "PackageA v1.2.0".

Наткнулся на это Как связать зависимости только для времени выполнения из пакетов NuGet в установщике Inno Setup? , что почти точно так, как я хочу, но, похоже, код нене работает в моем сценарии Inno.

Любая помощь или предложение о том, как подойти к этому?

1 Ответ

0 голосов
/ 13 декабря 2018

Можно определить функцию препроцессора Inno Setup , которая разрешит маску файла каталога.Для этого используйте FindFirst function :

#define FindFolder(Path) \
    Local[0] = FindFirst(Path, faDirectory), \
    Local[0] ? AddBackslash(ExtractFileDir(Path)) + FindGetFileName(Local[0]) : Path

[Files]
Source: "{#FindFolder("..\packages\PackagesA*")}\*.*"; DestDir: "{app}"; \
    flags: recursesubdirs  

Если вы добавите SaveToFile вызов в конец сценария:

#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")

... вы увидите, что приведенный выше код разрешается в:

[Files]
Source: "..\packages\PackageA1.2.0\*.*"; DestDir: "{app}"; flags: recursesubdirs  

Если такая папка не найдена, код разрешается в:

[Files]
Source: "..\packages\PackageA*\*.*"; DestDir: "{app}"; flags: recursesubdirs  

... ив этом случае компилятор завершится ошибкой с "Не найдено файлов, соответствующих ..." .

...