При создании установщика с помощью Inno Setup часто требуется скопировать несколько файлов в разные пользовательские местоположения. Для этого можно использовать раздел [Files] и функцию FileCopy(). Однако, как отмечается в вопросе, невозможно напрямую обращаться к элементам раздела [Files] из скрипта.
Подход с использованием препроцессора
Хотя напрямую обратиться к элементам раздела [Files] нельзя, можно использовать препроцессор Inno Setup для генерации tanto раздела [Files], как и скрипта на Паскале, основанном на одном списке файлов. Рассмотрим пример, демонстрирующий этот подход:
; Определяем массив файлов для обработки
#dim Files[2]
#define Files[0] "MyProg.exe"
#define Files[1] "MyProg.chm"
#define I
; Итерируем массив файлов, генерируя одну запись в разделе [Files] для каждого файла
[Files]
#sub FileEntry
Source: "{#Files[I]}"; DestDir: "{app}"
#endsub
#for {I = 0; I < DimOf(Files); I++} FileEntry
[Code]
procedure CopyFiles;
begin
// Итерируем массив файлов, генерируя два вызова FileCopy() для каждого файла
#sub FileCopy
FileCopy('{#Files[I]}', 'd:\destination1\{#Files[I]}', True);
FileCopy('{#Files[I]}', 'd:\destination2\{#Files[I]}', True);
#endsub
#for {I = 0; I < DimOf(Files); I++} FileCopy
end;
; Выводим предварительно обработанный скрипт в файл для отладки
#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")
При компиляции этого скрипта можно увидеть, что он генерирует следующий предварительно обработанный код в файле Preprocessed.iss:
Inno Setup распознает одинаковые исходные файлы и упаковывает их только один раз.
Вывод
Хотя напрямую обращаться к элементам раздела [Files] из скрипта невозможно, можно использовать препроцессор Inno Setup для генерации tanto раздела [Files], как и скрипта на Паскале, основанных на одном списке файлов. Это позволяет эффективно копировать несколько файлов в разные пользовательские местоположения.
При создании установщика с помощью Inno Setup для копирования нескольких файлов в разные пользовательские местоположения можно использовать препроцессор для генерации раздела [Files] и скрипта на Паскале, основанных на одном списке файлов.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.