大家好,提前感谢您的帮助。 语境: 我正在尝试创建网络安装程序,下载文件,读出其内容(文件名),将它们填充为组件,然后“继续”仅下载用户选择的组件(文件)。 问题:除了配置 inno 下载管理器以在 wpWelcome 之后开始下载一个文件以及在自定义选择组件页面之后开始下载其他文件之外的所有步骤。那么本质上,是否可以将 idp 配置为在同一安装程序中的不同时间下载多个文件? 我尝试了什么:
[Code]
procedure InitializeWizard();
var
SelectComponentsLabel: TNewStaticText;
begin
idpDownloadAfter(wpWelcome);
idpAddFile('ftp://host.com/filesToDownload.txt', ExpandConstant('{tmp}\filesToDownload.txt'));
CustomSelectComponentsPage := CreateCustomPage(wpSelectComponents, SetupMessage(msgWizardSelectComponents),SetupMessage(msgSelectComponentsDesc));
.....//continue creating CustomSelectTasksPage
ende;
function NextButtonClick(CurPageID: Integer): Boolean;
var
Url, AppName: string;
Lines: array of string;
I: Integer;
begin
Result := True;
if CurPageID = IDPForm.Page.ID then // or maybe Check for custom page?
begin
idpClearFiles;
ReadTextFile(ExpandConstant('{tmp}\filesToDownload.txt'), Lines);
for I := 0 to GetArrayLength(Lines) - 1 do
begin
AppName := Lines[I];
if not ListDownloaded then
ComponentsList.AddCheckBox(AppName, '', 0, False, True, False, False, nil);
if ComponentsList.Checked[I] then // Check if checkbox is selected
begin
idpAddFile('ftp://host.com/'+AppName', ExpandConstant('{tmp}\' + AppName));
idpDownloadAfter(CustomSelectComponentsPage.ID);
end;
end;
ListDownloaded:= True;
idpFormActivate(nil); { This restarts the download }
Result := False;
end;
end;
因此,我希望 idpForm 启动两次,一次是在欢迎屏幕下载主文本文件之后,另一次是在自定义 SelectComponentsPage 中选择组件之后。但发生的情况是,在欢迎向导页面和第二次配置之后,所有文件都会下载一次(idpDownloadAfter(CustomSelectComponentsPage.ID));
回答你的字面问题:我会在第一次下载完成后尝试调用
idpDownloadAfter
进行第二次下载。
但我宁愿建议您使用以下两种替代解决方案之一:
当您下载一个小文本文件时,一个简单的解决方案是使用简单的 HTTP 调用来读取/下载它。
或者,在最新版本中使用原生 Inno Setup 支持 HTTP 下载。它的实现在多次运行时没有任何问题,因为它不使用全局变量(与 IDP 不同)。