【问题标题】:Inno Setup Task checked only if a specific Component is selectedInno Setup Task checked only if a specific Component is selected
【发布时间】:2015-02-27 23:51:15
【问题描述】:

可以通过简单地列出Components: a b c 等将任务设置为依赖于所选组件的显示,并且可以通过指定Flags: unchecked 将其设置为默认不选中。但是,如果只选择了一个特定组件而对所有其他组件保持未选中状态,似乎没有办法使用代码运行条件检查来检查任务。

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

在这里,如果选择了 Client、Standalone 或 Server 组件,我希望 SystemInfo 任务显示为可选选项,但如果选择了 Server 组件,我希望默认选中而不是取消选中此选项。基本上,有没有办法在代码中执行Check: IsComponentServerSelected 并删除Flag: unchecked(如果为真)?也许我忽略了另一种方法?

【问题讨论】:

    标签: inno-setup


    【解决方案1】:

    我对这个解决方案并不完全满意,但至少它看起来确实有效。可以通过创建两个类似的 [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;
    

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

    【讨论】:

    • Flags 不能使用{code...} 常量,但您可以创建两个条目,然后使用Checklike this)只创建其中一个。
    • @TLama 谢谢,但我认为这就是我已经完成的,但是使用Components 条目,不是吗?还是通过Check 约束来做这件事略有不同?这很有趣,因为我最初使用Check 约束,然后才意识到它不是必需的,可以使用Components 条目来完成。你能澄清一下是否有区别吗?
    • 我已经更深入地检查了直接解决方案,但目前还没有。您发布的方式似乎是最好的。我的建议也可以,但需要编写一个额外的Check 函数。只列出组件要好得多。
    • @TLama 感谢您的确认。
    猜你喜欢
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多