Скачать на основе задачи, выбранной с помощью Inno Download Plugin? - PullRequest
1 голос
/ 19 июня 2020

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

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

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;

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

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

Ответы [ 2 ]

1 голос
/ 19 июня 2020

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

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

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

1 голос
/ 19 июня 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;

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

Components

The main problem here is that it has decided this component is 56MB and that is wrong! The file is actually 7.28MB. Although I suppose the 56MB is the whole setup. Also, the various "Types" don't really make sense, but if I remove them I lose the check box choices.

Step 4

I adjusted the UpdateReadyMeno output like this:

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) кажется быть лучшим способом.

...