根据使用 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)
中的所有文件 – 即使是那些无条件添加的文件。
我在尝试实现我想要的目标时遇到了一些问题,我将分别讨论每个问题。它涉及我之前询问过的帮助文档设置文件。但是现在我正在使用 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)
中的所有文件 – 即使是那些无条件添加的文件。