Inno setup Inno安装程序:如果检查了任务,则请求目录页

Inno setup Inno安装程序:如果检查了任务,则请求目录页,inno-setup,pascalscript,Inno Setup,Pascalscript,在任务部分下,我有 [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; \ GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "installFolder"; Description: "Install project folder."; \ GroupDescription:" folder"; 在文件部分是这个特

在任务部分下,我有

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; \
    GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "installFolder"; Description: "Install project folder."; \
    GroupDescription:" folder";
文件
部分是这个特定的文件夹

Source: "C:\\Output\LEA\*.*"; DestDir: {code:GetDataDir}; \
    Flags: createallsubdirs recursesubdirs ignoreversion; 
我的目标是测试checked按钮,然后有一个窗口来请求安装文件夹的目录

如果选中了WizardForm.TasksList.3,则
GetDataDir;
这可以在不需要创建页面或一个页面来获取目录的情况下完成吗? 另外,这是否是处理可选的额外文件的好方法,这些文件将安装到与默认的
{app}
位置不同的位置


到目前为止,让我感到困惑的是,在编译完所有任务后,会在页面之前调用
GetDataDir
,以选择任务。所以我选择了我的目录,然后问我是否要安装它。我不知道如何让
GetDataDir
随后出现。

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

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

函数ShouldSkipPage(PageID:Integer):布尔值;
开始
如果(PageID=InstallFolderPage.ID)未选中('installFolder'),则
结果:=真
其他的
结果:=假
结束;
在这种情况下,只需一次检查,即可缩短为:

函数ShouldSkipPage(PageID:Integer):布尔值;
开始
结果:=(PageID=InstallFolderPage.ID)且未选择IsTaskSelected('installFolder')
结束;

如上所述,您不需要在
{code:…}
函数中执行任何特殊操作,只需直接返回适当的值即可。

您只需添加';任务:源文件末尾的installFolder。。。行,则除非已选择任务,否则不会调用它

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

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