Inno设置图像下载

时间:2011-05-22 11:17:52

标签: download inno-setup pascal

我正在使用Inno Setup Compiler(Pascal Scripting)。 我的表单有一个图像对象(TBitmapImage),我想提供从网址获得的动态图像。是否可以在Inno Setup脚本中静默下载图像(或其他类型的文件)?

3 个答案:

答案 0 :(得分:3)

我会编写一个从Internet下载文件的小型Win32程序,例如

program dwnld;

uses
  SysUtils, Windows, WinInet;

const
  PARAM_USER_AGENT = 1;
  PARAM_URL = 2;
  PARAM_FILE_NAME = 3;

function DownloadFile(const UserAgent, URL, FileName: string): boolean;
const
  BUF_SIZE = 4096;
var
  hInet, hURL: HINTERNET;
  f: file;
  buf: PByte;
  amtc: cardinal;
  amti: integer;
begin
  result := false;
  hInet := InternetOpen(PChar(UserAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    hURL := InternetOpenUrl(hInet, PChar(URL), nil, 0, 0, 0);
    try
      GetMem(buf, BUF_SIZE);
      try
        FileMode := fmOpenWrite;
        AssignFile(f, FileName);
        try
          Rewrite(f, 1);
          repeat
            InternetReadFile(hURL, buf, BUF_SIZE, amtc);
            BlockWrite(f, buf^, amtc, amti);
          until amtc = 0;
          result := true;
        finally
          CloseFile(f);
        end;
      finally
        FreeMem(buf);
      end;
    finally
      InternetCloseHandle(hURL);
    end;
  finally
    InternetCloseHandle(hInet);
  end;
end;

begin

  ExitCode := 0;

  if ParamCount < 3 then
  begin
    MessageBox(0,
      PChar(Format('%s: This program requires three command-line arguments.',
        [ExtractFileName(ParamStr(0))])),
      PChar(ExtractFileName(ParamStr(0))),
      MB_ICONERROR);
    Exit;
  end;

  if FileExists(ParamStr(PARAM_FILE_NAME)) then
    DeleteFile(PChar(ParamStr(PARAM_FILE_NAME)));

  if DownloadFile(ParamStr(PARAM_USER_AGENT), ParamStr(PARAM_URL),
      ParamStr(PARAM_FILE_NAME)) then
    ExitCode := 1;

end.

此程序需要三个命令行参数:要发送到Web服务器的UserAgent(可以是任何内容,例如“MyApp Setup Utility”),Internet上文件的URL以及文件名。正在创建的文件。不要忘记将参数括在引号(“)中。如果下载失败,程序的退出代码为0,如果下载成功,则为1。

然后,在您的Inno安装脚本中,您可以

[Files]
Source: "dwnld.exe"; DestDir: "{app}"; Flags: dontcopy

[Code]

function InitializeSetup: boolean;
var
  ResultCode: integer;
begin
  ExtractTemporaryFile('dwnld.exe');
  if Exec(ExpandConstant('{tmp}\dwnld.exe'),
      ExpandConstant('"{AppName} Setup Utility" "http://privat.rejbrand.se/sample.bmp" "{tmp}\bg.bmp"'),
      '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
    if ResultCode = 1 then    
      (* Now you can do something with the file ExpandConstant('{tmp}\bg.bmp') *);
end;

不幸的是,我知道你无法在运行时更改WizardImageFile ...

答案 1 :(得分:2)

实际上可以使用InnoTools Downloader从网上下载几乎任何内容。

答案 2 :(得分:0)

Inno安装程序没有任何内置功能,但是,您可以使用为您完成工作的批处理文件来执行此操作。

1)下载命令行URL资源下载器,如 - http://www.chami.com/free/url2file_wincon.html

有关如何使用它的一些提示 - http://www.chami.com/tips/windows/062598W.html

2)将其打包在安装程序中

3)创建一个调用url2file.exe的批处理文件,并将您的图像提取到app目录

4)在Inno Setup安装程序脚本的初始化设置命令中调用此批处理文件。

5)在任何地方使用该图像!

ps - 如果您在设置中使用图像,请检查是否允许不同的图像加载..我不确定。 如果您有任何其他问题,请告诉我