Inno setup 仅当选择了特定组件时,才会选中Inno设置任务

Inno setup 仅当选择了特定组件时,才会选中Inno设置任务,inno-setup,Inno Setup,通过简单列出组件:a b c等,可以将任务设置为根据所选组件显示,并通过指定标志:未选中将任务设置为默认不选中。但是,如果只选择了一个特定组件,而所有其他组件都未选中,则似乎没有办法使用代码运行条件检查来检查任务 Name: "SystemInfo"; Description: "Audit System Information"; GroupDescription: "Additional Setup Options"; Flags: unchecked; Components: Client

通过简单列出
组件:a b c
等,可以将任务设置为根据所选组件显示,并通过指定
标志:未选中
将任务设置为默认不选中。但是,如果只选择了一个特定组件,而所有其他组件都未选中,则似乎没有办法使用代码运行条件检查来检查任务

Name: "SystemInfo"; Description: "Audit System Information"; GroupDescription: "Additional Setup Options"; Flags: unchecked; Components: Client Standalone Server

在这里,如果选择了客户端、独立组件或服务器组件,我希望SystemInfo任务显示为可选选项,但如果选择了服务器组件,我希望默认情况下选中此选项,而不是取消选中。基本上,是否有方法在代码中执行
检查:IsComponentServerSelected
,如果为true,则删除
标志:unchecked
?也许我忽略了另一种解决方法?

我对这个解决方案并不完全满意,但至少它看起来确实有效。可以通过创建两个类似的
[Task]
条目并根据所选组件显示选中或未选中的条目来实现这一点,如下所示:

Name: "SystemInfo"; Description: "Audit System Information"; GroupDescription: "Additional Setup Options"; Flags: unchecked; Components: Client
Name: "SystemInfoServer"; Description: "Audit System Information"; GroupDescription: "Additional Setup Options"; Components: Server Standalone
然后在
[code]
中引用两个任务,而不仅仅是一个任务:

      if IsTaskSelected('SystemInfo') or IsTaskSelected('SystemInfoServer') then
    begin;
      AuditSystemInfo;
    end;

我仍然很想知道是否有更好的解决方案,只允许存在一个任务,并根据所选组件动态更改标志状态。注意,我确实尝试过使用
标志:{code:GetAuditFlag}
,但这不起作用,我想是因为调用它太早了,即在安装程序初始化之前。

您不能为
标志使用
{code…}
常量,但您可以创建两个条目,并通过使用
检查
(某物)只创建其中一个条目@TLama谢谢,但我想这是我已经做过的,但是使用
组件
条目,不是吗?或者,通过
检查
约束进行检查是否略有不同?这很有趣,因为我最初使用的是
检查
约束,后来才意识到它不是必需的,可以使用
组件
条目来完成。你能澄清一下是否有区别吗?我已经深入研究了一个直接的解决方案,但目前还没有人。你发布的方式似乎是最好的。我的建议也可以,但需要编写一个额外的
Check
函数。只列出组件要好得多。@TLama感谢您的确认。