【问题标题】:Inno Setup: Asking for directory page if a task checkedInno Setup:如果检查了任务,则询问目录页面
【发布时间】:2013-11-18 15:38:22
【问题描述】:

在我的任务部分下

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

【问题讨论】:

  • OT:您可以使用IsTaskSelected函数来检查某个任务是否被选中。关于其余的;我有点迷失了你的目标是什么。是的,您可以在 GetDataDir getter 函数中指定您想要的任何目录;不需要创建用于指定目录的自定义页面。是的,这就是在运行时更改目标目录的方法。
  • 进行了更新。本质上,我的 GetdataDir 是在我做出额外任务选择之前而不是之后被调用的。
  • 您的GetDataDir getter 可能会被多次调用,但恕我直言,它不应该在任务选择页面之前被调用。但是,你甚至不需要对它做任何事情。您所需要的只是在安装这些文件之前评估该值。这就是 Inno Setup 为您所做的。在任何情况下,都不要手动调用 GetDataDir getter(因为您不需要),也不要在此处执行任何操作,例如创建窗口、页面或类似内容。只需从它返回要传递给脚本入口参数的值。这是{code:} getter 函数的唯一用途。

标签: inno-setup pascalscript


【解决方案1】:

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

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

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:...}函数中做任何特别的事情,直接返回适当的值即可。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多