#inno-setup #pascalscript #inno-setup-v6
Вопрос:
Я использую систему загрузки Inno Setup, но я хотел бы изменить папку загрузки с {tmp}
другой, может ли кто-нибудь мне помочь?
от:
DownloadPage.Add('{#LinkJava}', ExpandConstant('{tmp}Java.exe'), '');
для:
DownloadPage.Add('{#LinkJava}', ExpandConstant('{src}{#PastaGeralDeApps}{#PastaDownPlugins}{#NomeExeJava}'), '');
Я создаю автоматический установщик, и мне нужно хранить приложения в папке, чтобы использовать их в автономном режиме.
Ответ №1:
Вы не можете изменить папку, в которую загружаются файлы, используя TDownloadWizardPage
(обратите внимание, что BaseName
аргумент TDownloadWizardPage.Add
принимает только имя файла, а не путь).
Но вы можете скопировать файлы в последнюю папку, как только они будут загружены.
[Files]
Source: "{tmp}downloaded-file.exe"; DestDir: "{app}"; flags: external
Вам, конечно, необходимо загрузить файлы перед фактической установкой. Так , например, из NextButtonClick(wpReady)
того, как это делает официальный CodeDownloadFiles.iss
пример.
Если вам нужно переместить файлы в конечное расположение перед установкой, используйте RenameFile
или FileCopy
функции. Копирование, очевидно, происходит медленнее, но более надежно, так как вы не можете перемещать/переименовывать диски/файловые системы. Вы можете попробовать переместиться, вернуться к копированию, если перемещение не удастся.
Комментарии:
1. Я последовал вашему совету и сумел решить эту проблему, создав новую функцию, как вы упомянули, большое вам спасибо 🙂
Ответ №2:
//function that performs the download - OK
function DownloadFiles(Url, Destination, FileName, Hash : String): Boolean;
begin
DownloadPage.Clear;
DownloadPage.Add(Url, FileName, Hash);
DownloadPage.Show;
try
try
DownloadPage.Download;
Result := True;
except
if DownloadPage.AbortedByUser then
Log('Aborted by user.')
else
SuppressibleMsgBox(AddPeriod(GetExceptionMessage), mbCriticalError, MB_OK, IDOK);
Result := False;
end;
finally
FileCopyLogged(ExpandConstant('{tmp}' FileName), ExpandConstant(Destination '' FileName), False);
end;
Result := True;
end;
Комментарии:
1. Подумайте о том, чтобы обратиться к реализации
FileCopyLogged
и выполнить проверку ошибок там. В целом, возможно, стоит попробовать сначала переместить, а не копировать. Но я понял, что вы копируете на USB-накопитель, поэтому перемещение не может быть успешным. Возможно, вы захотите удалить ненужный файл{tmp}
справа после его копирования, вместо того, чтобы ждать, пока Inno Setup сделает это за вас в конце, чтобы не хватало места на диске, если у вас несколько загрузок.