Inno Setup загрузка изображений - PullRequest
1 голос
/ 22 мая 2011

Я работаю с Inno Setup Compiler (Pascal Scripting).В моей форме есть объект изображения (TBitmapImage), и я хотел бы предоставить динамическое изображение, полученное из веб-URL.Можно ли загрузить изображение (или другой тип файла) в сценарии Inno Setup без вывода сообщений?

Ответы [ 3 ]

3 голосов
/ 22 мая 2011

Я бы написал небольшую программу для 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.

Эта программа принимает три аргумента командной строки: UserAgent для отправки на веб-сервер (может быть что угодно, например, «MyApp Setup Utility»), URL-адрес файла в Интернете и имя файла файл, который создается. Не забудьте заключить аргументы в кавычки ("). Код завершения программы: 0, если загрузка не удалась, и 1, если загрузка прошла успешно.

Затем в вашем скрипте Inno Setup вы можете сделать

[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 во время выполнения ...

2 голосов
/ 03 июня 2011

На самом деле можно загрузить практически все из Интернета, используя InnoTools Downloader .

0 голосов
/ 22 мая 2011

Inno setup не имеет встроенных функций для этого, однако вы можете выполнить это действие с помощью пакетных файлов, которые выполняют эту работу за вас.

1) загрузить загрузчик ресурсов URL-адреса командной строки, например - http://www.chami.com/free/url2file_wincon.html

Несколько советов о том, как его использовать - http://www.chami.com/tips/windows/062598W.html

2) Упакуйте его в установщик

3) создайте пакетный файл, который вызывает url2file.exe и извлекает вашизображение в каталог приложения

4) Вызовите этот пакетный файл в команде инициализации программы установки Inno Setup.

5) Используйте это изображение, где хотите!

ps - если вы используете изображение в настройке, проверьте, разрешена или нет загрузка другого изображения. Я не уверен в этом.Дайте мне знать, если у вас есть другие вопросы

...