Загрузка файлов через Интернет, если компонент выбран (WITH Inno Tools Downloader)

Этот код фактически загружает мне файлы, и не имеет значения, является ли выбранный компонент "тестовым" или нет. Я хочу, чтобы эти два файла были загружены, если вы выбрали компонент, можете это сделать? Я использую Inno Inno Setup 5 + Tools Downloader)

[Components]
Name: Dictionaries; Description: "test"; Types: Full; ExtraDiskSpaceRequired: 50;

[Languages]
Name: english; MessagesFile: compiler:Default.isl

    #include ReadReg(HKEY_LOCAL_MACHINE,'Software\Sherlock Software\InnoTools\Downloader','ScriptPath','');

[Code]
    procedure InitializeWizard();
    begin
     itd_init;


     itd_addfile('http://www.sherlocksoftware.org/petz/files/dogz5.zip',expandconstant('{tmp}\dogz5.zip'));
     itd_addfile('http://www.sherlocksoftware.org/petz/files/petz4.zip',expandconstant('{tmp}\petz4.zip'));


     itd_downloadafter(wpReady);
    end;

    procedure CurStepChanged(CurStep: TSetupStep);
    begin
     if CurStep=ssInstall then begin 
      filecopy(expandconstant('{tmp}\dogz5.zip'),expandconstant('{app}\dogz5.zip'),false);
      filecopy(expandconstant('{tmp}\petz4.zip'),expandconstant('{app}\petz4.zip'),false);
     end;
    end;

1 ответ

Решение

Да, это возможно Вы ищете небольшую вспомогательную функцию IsComponentSelected ().

Это в основном логический тестер, принимающий компонент name от [components] и возвращая значение флажка (selected=true).

// for a single component
if IsComponentSelected('NameOfTheComponent') then idpAddFile(URL, ...);`

// multiple components with one selection
if IsComponentSelected('dictionaries') then
begin
   idpAddFile(URL1, ...);
   idpAddFile(URL2, ...);
end;

Комментарий от TLama:

В каком случае и где ставить в очередь файлы для скачивания?

Я бы предложил использовать NextButtonClick событие с условием, что текущее (CurPage) должен быть экраном выбора компонентов (wpSelectComponents). Другими словами: когда вы находитесь на экране выбора компонентов и нажимаете "Далее", в загрузчик добавляются только выбранные компоненты.

Код может выглядеть так:

function NextButtonClick(CurPage: Integer): Boolean;
(*
    Called when the user clicks the Next button.
    If you return True, the wizard will move to the next page.
    If you return False, it will remain on the current page (specified by CurPageID).
*)
begin
  if CurPage = wpSelectComponents then
  begin
    if IsComponentSelected('NameOfTheComponent') then idpAddFile(URL, ...);

  end; // of wpSelectComponents

  Result := True;
end;

Sidenote: вы можете переключить свою загружаемую библиотеку на https://code.google.com/p/inno-download-plugin/ Она обладает улучшенными функциями, включая приличную поддержку https, и активно поддерживается. Загрузка InnoTools от SherlockSoftware устарела (2008).

Другие вопросы по тегам