Inno安装程序:在安装开始之前下载安装程序.bin slice文件

时间:2018-07-12 12:33:57

标签: inno-setup pascalscript inno-download-plugin

我正在尝试使用Inno设置工具和Inno下载插件创建可分发的.exe文件。生成的文件大小约为3GB,分为6部分(可执行文件1个,包含所有文件的5个文件箱)。

是否可以将5个bin保留在某个服务器上,并在安装过程中与其余的可执行文件一起下载?

我的代码在这里:

procedure InitializeWizard();
var
  ResultCode: integer;
  TempAddress: String;
  FinalSavePath: String;
  UserName, UserCompany: String;
begin
  idpSetOption('DetailedMode',  '1');
  idpSetOption('AllowContinue', '1');

  idpSetLogin('aaa', 'aaa');

  idpAddFile('https://...', target_path);
  idpAddFile('https://...', target_path);
  idpAddFile('https://...', target_path);
  idpAddFile('https://...', target_path);
  idpDownloadAfter(wpWelcome);
end;

如果已经存在idpDownloadAfter(wpWelcome)个文件,安装程序将在接受运行可执行文件后立即使用.bin开始下载。如果没有,安装程序会一直要求提供.bin

1 个答案:

答案 0 :(得分:1)

Inno Download Plugin使用idp.dll,它本身存储在mysetup-*.bin文件中。这就是为什么甚至在开始之前都会提示您输入.bin文件的原因。您需要idp.dll才能开始下载。

通过一些黑客攻击,您可以将idp.dll存储在[Code]中,因此可以直接存储在mysetup.exe中。
参见Inno Setup: Reading a file from installer during uninstallation

您将需要如下修改idp.iss

  • 通过引用[Files]删除idp.dll部分。
  • 在所有external函数声明中:
    @files:idp.dll cdecl更改为@{tmp}\idp.dll cdecl delayload

.iss脚本的最前面,从my answer to the previously mentioned question复制长代码块。

现在您可以这样做:

procedure InitializeWizard();
begin
  SaveBinaryStringToFile(
    ExpandConstant('{tmp}\idp.dll'), {#FileToBinaryString("unicode\idp.dll")});

  idpAddFile(
    'https://www.example.com/mysetup-1.bin', ExpandConstant('{src}\mysetup-1.bin'));

  idpDownloadAfter( {whatever} );
end;

请确保在调用idp.dll时将FileToBinaryString的路径更新为开发计算机上的正确位置。

该代码用于Unicode version of Inno Setup