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

4

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

于 2013-11-19T11:09:30.807 回答
0

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

Source: "C:\\Output\LEA\*.*"; DestDir: {code:GetDataDir}; Flags: createallsubdirs recursesubdirs ignoreversion; Tasks: installFolder
于 2014-10-28T15:16:56.173 回答