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

时间:2013-11-18 15:38:23

标签: inno-setup pascalscript

在任务部分我有

[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在事后发生。

2 个答案:

答案 0 :(得分: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:...}函数中做任何特殊的事情,只需直接返回适当的值。

答案 1 :(得分:0)

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

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