Inno Setup:如果检查了任务,则询问目录页面

问题描述 投票:2回答:2

在我的任务部分

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; \
    GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "installFolder"; Description: "Install project folder."; \
    GroupDescription:" folder";

Files部分是这个特殊的文件夹

Source: "C:\\Output\LEA\*.*"; DestDir: {code:GetDataDir}; \
    Flags: createallsubdirs recursesubdirs ignoreversion; 

我的目标是测试已选中的按钮,然后有一个窗口要求安装文件夹的目录。

if WizardForm.TasksList.Checked[3] then
  GetDataDir;

这可以在不需要创建页面或一页来获取目录的情况下完成吗?此外,这是处理可选的额外文件的好方法,并将安装到与默认{app}位置不同的位置吗?

到目前为止,对我来说令人困惑的部分是当它全部编译完毕时,在页面之前调用GetDataDir来选择任务。所以我选择了我的目录,然后我被问到是否要安装它。我不知道如何让GetDataDir事后发生。

inno-setup pascalscript
2个回答
2
投票

Inno Setup中的向导模型意味着您应始终创建向导页面,但您可以跳过不需要显示的页面。

这可以通过调用ShouldSkipPage()IsTaskSelected()事件函数中完成:

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID = InstallFolderPage.ID) and not IsTaskSelected('installFolder') then
    Result := True
  else
    Result := False
end;

在这种情况下,只需一次检查,就可以缩短为:

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := (PageID = InstallFolderPage.ID) and not IsTaskSelected('installFolder')
end;

正如TLama所说,你不需要在{code:...}函数中做任何特殊的事情,只需直接返回适当的值。


0
投票

你只需要添加';任务:在Source ...行末尾的installFolder',除非已选择任务,否则不会调用它。

Source: "C:\\Output\LEA\*.*"; DestDir: {code:GetDataDir}; Flags: createallsubdirs recursesubdirs ignoreversion; Tasks: installFolder
© www.soinside.com 2019 - 2024. All rights reserved.