【问题标题】:InnoTools Downloader not working with Inno 5.5InnoTools 下载器不适用于 Inno 5.5
【发布时间】:2013-10-17 17:25:29
【问题描述】:

根据这里关于 SO 的几篇文章的建议,我一直在使用 InnoTools 下载器尝试在 Inno 设置中的安装脚本期间为我们的应用安装第 3 方依赖项。

不幸的是,InnoTools 下载器已经有几年没有更新了,并且开始看起来与当前的 Inno Tools 设置(目前我的机器上的 5.5.2 (u))不兼容。 ITD 中的 PChar 参数已被 PAnsiChar 参数替换,当我尝试运行各种 ITD_xxx 程序时,它给了我不同程度的失败:

  • ITD_DownloadFiles 给出类型不匹配错误,不会在 Inno Setup 中编译
  • ITD_DownloadFile 编译,但显示的文件长度为 6KB,无法运行。

有没有人让 ITP 使用更新的 Inno(5.3.0 后)unicode 版本运行?还是我应该四处寻找其他解决方案?

编辑 只是为了澄清一点,我尝试进入 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 方法给出了类似的结果。

【问题讨论】:

  • “当我尝试运行”而不向我们展示你在做什么是没有帮助的,没有特定的错误消息和行也没有“给出类型不匹配错误并且不会编译”那是产生错误。 Delphi 2009 之前的 PChar 相当于 D2009 和更高版本的 PAnsiChar,但如果没有具体说明您遇到的问题,就很难推荐解决方案。
  • 除了将PChar 替换为PAnsiChar,您必须将string 替换为AnsiString
  • @KenWhite - 谢谢 - 我刚刚添加了一个 [code] 部分来描述我到目前为止所做的尝试。
  • @TLama - 谢谢。我在 it_download.iss 文件中完成了 PChar->PAnsiChar 替换;我只是用 AnsiStrings 替换了字符串。看起来没有任何帮助。 :-( 我发现了另一个 Inno 插件,如果我无法运行它,我可能会考虑作为替代插件(这里:mitrich.net23.net/?/inno-download-plugin.html)。
  • 它对我有用。我刚刚将PChar 替换为PAnsiChar,将string 替换为AnsiString,并尝试了您发布的代码。现在的问题是您下载的是网站而不是 GIT 安装程序二进制文件。检查下载文件的内容。这是一个 HTML 文档。

标签: inno-setup inno-tools-downloader


【解决方案1】:

除了将所有出现的PChar 类型替换为PAnsiChar 之外,您需要在it_download.iss 文件中将所有出现的string 类型替换为AnsiString。下一个问题是您要获取的 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;

【讨论】:

  • Ack(用刘海把头撞在桌子上)。这就是问题所在——可爱的重定向!非常感谢。
  • 不客气!无论如何,我希望 IDT 重定向处理,虽然它似乎没有任何支持。奇怪...
  • string 转换为AnsiString 会引发“不兼容的类型”错误。它无需更换它们就可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多