在任务部分我有
[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
在事后发生。
答案 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