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感谢您的确认。