Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Обработка нескольких файлов с разными местоположениями в Inno Setup

Delphi , Синтаксис , Циклы

При создании установщика с помощью 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:

[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"

[Code]
procedure CopyFiles;
begin
  FileCopy('MyProg.exe', 'd:\destination1\MyProg.exe', True);
  FileCopy('MyProg.exe', 'd:\destination2\MyProg.exe', True);
  FileCopy('MyProg.chm', 'd:\destination1\MyProg.chm', True);
  FileCopy('MyProg.chm', 'd:\destination2\MyProg.chm', True);
end;

Альтернативный подход

Вместо генерации вызовов FileCopy() в коде, можно сгенерировать несколько записей в разделе [Files] для одного и того же файла:

; Итерируем массив файлов, генерируя одну запись в разделе [Files] для каждого файла
[Files]
#sub FileEntry
Source: "{#Files[I]}"; DestDir: "{app}"
Source: "{#Files[I]}"; DestDir: "d:\destination1"
Source: "{#Files[I]}"; DestDir: "d:\destination2"
#endsub

#for {I = 0; I < DimOf(Files); I++} FileEntry

Это приведет к следующему результату:

[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.exe"; DestDir: "d:\destination1"
Source: "MyProg.exe"; DestDir: "d:\destination2"
Source: "MyProg.chm"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "d:\destination1"
Source: "MyProg.chm"; DestDir: "d:\destination2"

Inno Setup распознает одинаковые исходные файлы и упаковывает их только один раз.

Вывод

Хотя напрямую обращаться к элементам раздела [Files] из скрипта невозможно, можно использовать препроцессор Inno Setup для генерации tanto раздела [Files], как и скрипта на Паскале, основанных на одном списке файлов. Это позволяет эффективно копировать несколько файлов в разные пользовательские местоположения.

Создано по материалам из источника по ссылке.

При создании установщика с помощью Inno Setup для копирования нескольких файлов в разные пользовательские местоположения можно использовать препроцессор для генерации раздела [Files] и скрипта на Паскале, основанных на одном списке файлов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Циклы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 01:47:59/0.0050179958343506/1