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

Inno Setup: Download setup .bin slice files before installation starts

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

是否可以将上传的 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 存在。

Inno Setup 6.1 内置了文件下载支持,不需要任何支持文件。所以下面的解决方案现在已经过时了。参见 Inno Setup: Install file from Internet


Inno 下载插件使用 idp.dll,它本身存储在 mysetup-*.bin 文件中。这就是为什么系统会提示您输入 .bin 文件,甚至在任何事情开始之前。您需要 idp.dll 才能开始下载。

通过一些黑客攻击,您可以将 idp.dll 存储在 [Code] 中,因此直接存储在 mysetup.exe.
中 参见

您需要修改 idp.iss 如下:

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

到您的 .iss 脚本的前面,从 复制长代码块。

现在您可以:

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;

确保在调用 FileToBinaryString.

时将 idp.dll 的路径更新到开发机器上的正确位置

代码用于 (Inno Setup 6 的唯一版本)。