Выполните скрипт один раз перед установкой дерева каталогов
Я пытаюсь написать установщик Inno Setup для установки, а затем запустить другие установщики. Проблема у меня при попытке установить Cygwin. Я загрузил Cygwin и все необходимые мне пакеты, чтобы я мог выполнить локальную установку. Затем я хочу добавить дополнительные файлы и каталоги к установке Cygwin.
Моя первая попытка была такой:
[Files]
Source: "{#Cygwin}\Cygwin\*"; DestDir: {tmp}\cygwin; Flags: recursesubdirs;
Source: "{#Cygwin}\additional\*"; DestDir: {tmp}\cygwin\additional; Flags: recursesubdirs
[Run]
Filename: "{tmp}\cygwin\setup-x86_64.exe"; Parameters: "-q -L"; WorkingDir: "{tmp}";
Но это означает, что у меня должен быть скрипт для добавления дополнительных файлов, потому что их некуда поместить, пока Cygwin не будет установлен командой [Run]
раздел.
Я пытался с помощью BeforeInstall
сценарий в [Files]
раздел для запуска установщика Cygwin перед добавлением дополнительных файлов, но потому что я должен использовать подстановочный знак с Source: "{#Cygwin}\additional\*";
скрипт вызывается один раз для каждого файла в дереве каталогов.
[Files]
раздел Inno Setup, кажется, принимает только исходные файлы, а не исходный каталог, если в каталоге нет подстановочного знака.
Есть ли способ, которым я могу заставить его установить все из дерева каталогов без использования подстановочного знака, или есть ли способ, которым я могу сделать BeforeInstall
Скрипт запускается только один раз, независимо от того, сколько файлов скопировано?
1 ответ
Установите Cygwin при первом вызове BeforeInstall
только функция
var
CygwinInstalled: Boolean;
procedure MyBeforeInstall;
begin
if CygwinInstalled then
begin
Log('Cygwin installed already');
end
else
begin
Log('Installing Cygwin');
{ install Cygwin here }
CygwinInstalled := true;
end;
end;