У меня было несколько проблем, пытаясь достичь того, что я хочу, и я буду обсуждать каждую проблему отдельно. Это касается установочного файла справочной документации, о котором я уже спрашивал раньше. Но теперь я использую 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
, но потом я столкнулся с прежней проблемой - перечислить файл как нуждающийся в загрузке.