使用其他下载插件,而不是 ITD(原因见下文)。
Inno Setup 6.1 原生支持下载。请参阅Inno Setup:从 Internet 安装文件
如果您使用旧版本的 Inno Setup,请使用 Inno 下载插件。
当您包含idp.iss
时,它定义了一个全局IDPForm
结构。它的Page
字段是TWizardPage
,代表一个下载页面。下载完成后,使用其 IDNextButtonClick
运行下载的文件(下载页面上的“下一步”按钮自动“按下”):
#include <idp.iss>
[Code]
procedure InitializeWizard;
begin
idpAddFile(
'https://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.0.M13/bin/' +
'apache-tomcat-9.0.0.M13-windows-x64.zip',
ExpandConstant('{tmp}\apache-tomcat-9.0.0.M13-windows-x64.zip'));
idpAddFile(
'https://www.example.com/jdk-8u111-windows-x64.exe',
ExpandConstant('{tmp}\jdk-8u111-windows-x64.exe'));
idpDownloadAfter(wpSelectDir);
end;
function NextButtonClick(CurPageID: Integer): Boolean;
var
ResultCode: Integer;
FileName: string;
begin
if CurPageID = IDPForm.Page.ID then
begin
FileName := ExpandConstant('{tmp}\jdk-8u111-windows-x64.exe');
Result := Exec(FileName, '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
if not Result then
begin
MsgBox('Cannot execute sub-installer', mbError, MB_OK);
end
else
begin
Result := (ResultCode = 0);
if not Result then
begin
MsgBox('Sub-installer failed', mbError, MB_OK);
end
end;
end
else
begin
Result := True;
end;
end;
还有DwinsHs(Inno Setup 的下载器)。
虽然您可以使用 InnoTools Downloader 实现相同的功能,但您应该避免使用它:
- 它已经过时且不再维护;
- 不支持 Unicode Inno Setup(新项目不要使用 Ansi Inno Setup);
- 不支持HTTPS;
- 它的下载页面不能在高 DPI 上进行缩放。
无论如何,为了完整性:ITD_DownloadAfter
返回TWizardPage
,代表下载页面。下载完成后,使用其 IDNextButtonClick
运行下载的文件(下载页面上的“下一步”按钮自动“按下”):
var
DownloadPage: TWizardPage;
procedure InitializeWizard();
begin
ITD_Init;
ITD_AddFile(
'http://www.example.com/jdk-8u111-windows-x64.exe',
ExpandConstant('{tmp}\jdk-8u111-windows-x64.exe'));
DownloadPage := ITD_DownloadAfter(wpSelectDir);
end;
function NextButtonClick(CurPageID: Integer): Boolean;
var
ResultCode: Integer;
begin
if CurPageID = DownloadPage.ID then
begin
Result :=
Exec(
ExpandConstant('{tmp}\jdk-8u111-windows-x64.exe'),
'', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
if not Result then
begin
MsgBox('Cannot execute sub-installer', mbError, MB_OK);
end
else
begin
Result := (ResultCode = 0);
if not Result then
begin
MsgBox('Sub-installer failed', mbError, MB_OK);
end
end;
end
else
begin
Result := True;
end;
end;