Скачать на основе задачи, выбранной с помощью Inno Download Plugin?

У меня было несколько проблем, пытаясь достичь того, что я хочу, и я буду обсуждать каждую проблему отдельно. Это касается установочного файла справочной документации, о котором я уже спрашивал раньше. Но теперь я использую IDP, мне нужно изменить мою логику, и я ошибаюсь.

Во-первых, у меня есть такая задача:

Name: "downloadhelp"; Description: "{cm:DownloadHelpTask}"; \
    GroupDescription: "{cm:DownloadHelpGroup}"; Flags: unchecked

Затем я добавил это:

procedure CurPageChanged(CurPageID: Integer);
begin
    if CurPageID = wpReady then
    begin
        if (WizardIsTaskSelected('downloadhelp')) then
            AddFileForDownload('{#HelpDocSetupURL}', ExpandConstant('{tmp}\HelpDocSetup.exe'));
    end;

    WizardForm.CancelButton.Top := WizardForm.NextButton.Top;
end;

И это в разделе [Run]:

Filename: "{app}\HelpDocSetup.exe"; \
    Parameters: "/SP- /VERYSILENT /InstallPath=""{app}"""; \
    WorkingDir: "{app}"; \
    Flags: waituntilterminated runhidden; \
    Description: "{cm:InstallingHelpDescription}"; \
    StatusMsg: "{cm:InstallingHelpStatusMessage}"; \
    Tasks: downloadhelp

Но когда я нахожусь на своей готовой странице, файл не отображается для загрузки.

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

Теперь я понимаю, что wpReady означает, что мы уже заполнили содержание памятки. Раньше я использовал эту строку:

;Source: "{tmp}\HelpDocSetup.exe"; \
;    DestDir: "{app}"; \
;    Flags: external deleteafterinstall; \
;    Tasks: downloadhelp; \
;    Check: DwinsHs_Check( ExpandConstant('{tmp}\HelpDocSetup.exe'), '{#HelpDocSetupURL}', \
;            'My_Setup', 'Get', {#HelpDocSetupFileSize}, 0 )

Задача указана правильно:

введите описание изображения здесь

Но мне нужно добавить, если задача выбрана. Сейчас он устарел. Что мне делать?

Я вижу этот вопрос, но он касается компоненты, а не задачи.

Второй ответ, здесь, звучит как возможное решение.

На основе связанного ответа я добавил:

function NextButtonClick(CurPageID: integer): boolean;
begin
    Result := True;

    if(CurPageID = wpSelectTasks) then
    begin
        if WizardIsTaskSelected('downloadhelp') then
            AddFileForDownload('{#HelpDocSetupURL}', ExpandConstant('{tmp}\HelpDocSetup.exe'));
    end;
end;

Но это ошибочно. Если пользователь использует следующий / назад, он продолжает добавлять файл несколько раз в список файлов для загрузки, и моя страница с готовой памяткой перечисляет все из них.

Я попытался изменить его, чтобы использовать компоненты и указанную там справку по загрузке. Затем я смог просто использовать idpAddFileComp в InitializeWizard, но потом я столкнулся с прежней проблемой - перечислить файл как нуждающийся в загрузке.


person Andrew Truckle    schedule 19.06.2020    source источник


Ответы (2)


Нет действительно элегантного способа решить эту проблему с помощью IDP.

Один из способов - вызвать idpClearFiles в BackButtonClick(wpReady).

Чтобы это сработало, вам, конечно, нужно будет добавить все файлы в NextButtonClick(wpSelectTasks) - даже те, которые добавляются безоговорочно.

person Martin Prikryl    schedule 19.06.2020
comment
В конце концов, я сделал это по-вашему (и не забыл сбросить эту переменную FilesToDownload. Выглядит нормально. - person Andrew Truckle; 19.06.2020

Не знаю, был ли это лучший способ, но, по крайней мере, он работает.

Шаг 1

Я добавил новый раздел [Components] вроде этого:

[Components]
Name: downloadhelpcomponent; Description: "{cm:DownloadHelpTask}"

Шаг 2

Я закомментировал предыдущую [Tasks] запись:

[Tasks]
;Name: "downloadhelp"; Description: "{cm:DownloadHelpTask}"; GroupDescription: "{cm:DownloadHelpGroup}"; Flags: unchecked

Шаг 3

Я добавил в initializeWizard следующее:

procedure InitializeWizard();
begin
    idpAddFileSizeComp('{#HelpDocSetupURL}', ExpandConstant('{tmp}\HelpDocSetup.exe'), {#HelpDocSetupFileSize}, 'downloadhelpcomponent');

    idpDownloadAfter(wpReady);

    { Make download wizard page resizeable }
    IDPForm.TotalProgressBar.Anchors := [akLeft, akTop, akRight];
    IDPForm.FileProgressBar.Anchors := [akLeft, akTop, akRight];
    IDPForm.TotalDownloaded.Anchors := [akTop, akRight];
    IDPForm.FileDownloaded.Anchors := [akTop, akRight];
    IDPForm.DetailsButton.Anchors := [akTop, akRight];
end;

Когда я запускаю этот установщик, страница выглядит так:

Компоненты

Основная проблема здесь в том, что он решил, что этот компонент составляет 56 МБ, и это неправильно! Размер файла на самом деле составляет 7,28 МБ. Хотя я полагаю, что 56 МБ - это вся установка. Кроме того, различные типы на самом деле не имеют смысла, но если я удалю их, я потеряю выбор флажка.

Шаг 4

Я настроил вывод UpdateReadyMeno следующим образом:

function UpdateReadyMemo(Space, 
                         NewLine, 
                         MemoUserInfoInfo, 
                         MemoDirInfo, 
                         MemoTypeInfo, 
                         MemoComponentsInfo, 
                         MemoGroupInfo, 
                         MemoTasksInfo: String): String;
begin
    Result := '';
    if MemoUserInfoInfo <> '' then
        Result := Result + MemoUserInfoInfo + NewLine + NewLine;
    if MemoDirInfo <> '' then
        Result := Result + MemoDirInfo + NewLine + NewLine;
    if MemoComponentsInfo <> '' then
        Result := Result + MemoComponentsInfo + NewLine + NewLine;
    if MemoGroupInfo <> '' then
        Result := Result + MemoGroupInfo + NewLine + NewLine;
    if (MemoTasksInfo <> '') then
        Result := Result + MemoTasksInfo + NewLine + NewLine;

    { Only display the Auto Backup Settings info if it is a new install }
    if (not bIsUpgrading) then
        Result := Result + AutoBackupPage_MemoInfo(Space, NewLine);

    if ((FilesToDownload <> '') or WizardIsComponentSelected('downloadhelpcomponent')) then
    begin
        Result := Result + ExpandConstant('{cm:ReadyMemo_Download}') + NewLine;

        if(FilesToDownload <> '') then
            Result := Result + FilesToDownload;

        if(IsComponentSelected('downloadhelpcomponent')) then
            Result := Result + Space + 'HelpDocSetup.exe' + NewLine;
    end;
end;

Итак, если компонент выбран, моя готовая страница будет выглядеть так:

Готовая памятка

Шаг 5

Наконец, я скорректировал запись [Run]:

Filename: "{tmp}\HelpDocSetup.exe"; \
    Parameters: "/SP- /VERYSILENT /InstallPath=""{app}"""; \
    WorkingDir: "{app}"; \
    Flags: waituntilterminated runhidden; \
    Description: "{cm:InstallingHelpDescription}"; \
    StatusMsg: "{cm:InstallingHelpStatusMessage}"; \
    Components: downloadhelpcomponent

Этот подход (который задокументирован в файлах справки IDP) кажется наилучшим.

person Andrew Truckle    schedule 19.06.2020