2

我正在尝试使用 Inno 安装工具和 Inno 下载插件创建一个可分发的 .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存在。

4

1 回答 1

2

Inno Setup 6.1 内置了对文件下载的支持,不需要任何支持文件。所以下面的解决方案现在已经过时了。请参阅Inno 设置:从 Internet 安装文件


Inno 下载插件使用idp.dll,它本身存储在mysetup-*.bin文件中。这就是为什么.bin在任何事情开始之前都会提示您输入文件的原因。您需要 ,idp.dll以便下载本身可以开始。

通过一些黑客攻击,您可以将idp.dll其存储[Code]mysetup.exe.
请参阅Inno Setup:在卸载期间从安装程序中读取文件

您将需要修改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;

确保idp.dll在调用FileToBinaryString.

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

于 2018-07-12T14:52:15.717 回答