根据使用 Inno Download Plugin 选择的任务进行下载?

Download based on the task selected with 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 )

正确列出任务:

但是如果选择了任务,我需要添加它。 它现在已经过时了。我该怎么办?

我看到这个 但它与组件而不是任务有关。

第二个答案here听起来可能是解决方案。

根据我添加的链接答案:

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;

但这是有缺陷的。如果用户使用下一个/后退,它会多次将文件添加到要下载的文件列表中,我的备忘页面列出了所有这些文件。

我尝试将其更改为使用组件和此处列出的“下载帮助”。然后我可以简单地在 InitializeWizard 中使用 idpAddFileComp 但是我最终遇到了之前列出需要下载的文件的问题。

我不知道这是否是最好的方法,但至少它有效。

第 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;

当我运行这个安装程序时,页面看起来像这样:

这里的主要问题是它决定这个组件是56MB,这是错误的!该文件实际上是 7.28MB。尽管我认为 56MB 是整个设置。此外,各种“类型”并没有真正意义,但如果我删除它们,我将失去复选框选择。

第 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 帮助文件中)似乎是最好的方法。

没有真正优雅的方法可以用 IDP 解决这个问题。

一种方法是在 BackButtonClick(wpReady) 中调用 idpClearFiles

为此,您当然需要添加 NextButtonClick(wpSelectTasks) 中的所有文件 – 即使是那些无条件添加的文件。