根据SO上几篇文章的推荐,我一直在与InnoTools Downloader合作,尝试在Inno设置的安装脚本中为我们的应用程序安装第三方依赖项。
不幸的是,InnoTools Downloader在几年内还没有更新,并且开始看起来它与当前的Inno Tools设置(目前我的机器上的5.5.2(u))不兼容。 ITD中的PChar参数已被PAnsiChar参数取代,当我尝试运行各种ITD_xxx程序时,它会给我不同程度的失败:
ITD_DownloadFiles
出现类型不匹配错误,无法在Inno Setup中编译ITD_DownloadFile
编译,但显示的文件长度为6KB且无法运行。有没有人让ITP与更新的Inno(5.3.0之后)unicode版本一起运行?或者我应该四处寻找另一种解决方案?
EDIT 为了澄清一点,我尝试进入it_download.iss文件并用PAnsiChar替换所有PChar实例。当我第一次尝试将ITD与我的设置脚本集成时,这让我超越了编译错误。
以下是Inno脚本的示例部分:
[Code]
procedure InitializeWizard();
begin
ITD_Init; // initialize the InnoTools Downloader
// install 3rd party tool (ex. Git) from the internet.
if ITD_DownloadFile('http://git-scm.com/download/win',expandconstant('{tmp}\GitInstaller.exe'))=ITDERR_SUCCESS then begin
MsgBox(expandconstant('{tmp}\GitInstaller.exe'), mbInformation, MB_OK);
Exec(ExpandConstant('{tmp}\GitInstaller.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, tmpResult);
end
end;
当它运行时,它将弹出一个对话框,说明它“下载”并存储文件 - 在我的机器上它位于c:\ Users \\ AppData \ Local \ Temp的子目录中。此文件为6KB,而不是从http://git-scm.com/download/win下载的文件,目前为15,221KB。
ITP_DownloadAfter
方法给出了类似的结果。
答案 0 :(得分:7)
除了用PChar
替换所有PAnsiChar
类型的匹配项,您需要在string
文件中将所有AnsiString
类型替换为it_download.iss
。下一个问题是您尝试获取的URL。文件大小与预期不同,因为您正在下载HTML文档而不是该站点重定向的二进制文件。因此,如果您已为ITD准备好Unicode,请将脚本中的URL更改为direct binary URL
。请注意,我没有使用HTTPS,因为ITD目前不支持SSL。代码证明可能如下所示:
[Code]
const
GitSetupURL = 'http://msysgit.googlecode.com/files/Git-1.8.4-preview20130916.exe';
procedure InitializeWizard;
var
Name: string;
Size: Integer;
begin
Name := ExpandConstant('{tmp}\GitInstaller.exe');
ITD_Init;
if ITD_DownloadFile(GitSetupURL, Name) = ITDERR_SUCCESS then
begin
if FileSize(Name, Size) then
MsgBox(Name + #13#10 + 'Size: ' + IntToStr(Size) + ' B',
mbInformation, MB_OK)
else
MsgBox('FileSize function failed!', mbError, MB_OK);
end;
end;