默认情况下,选择子组件也会自动选择其父组件(尽管您可以禁用它)。不过,这听起来正是您想要的行为——您只是倒着想。
假设您有独立的组件 A 和 B。您还拥有组件 C 和 D,它们中的每一个都可以彼此单独安装,但需要安装组件 B。
[Components]
Name: "A"; Description: "app 1"
Name: "B"; Description: "app 2"
Name: "B\C"; Description: "feature C of app 2"
Name: "B\D"; Description: "feature D of app 2"
鉴于这种安排,用户将能够根据需要自行选择 A 或 B;他们还可以选择添加 C 或 D(或不添加)。但是选择 C 或 D 也会强制选择 B。
(注意:这假设您有其他以所有这些为条件的条目,特别是 B 本身。如果您只是自己测试复选框并且尚未添加Components:
条件,那么您将不得不添加Flags: checkablealone
到 B in为了获得所需的行为。)
为了更接近您上面的示例,请尝试以下操作:
[Components]
Name: "app1"; Description: "app 1"
Name: "app1\app2"; Description: "app 2"
Name: "app1\app2\child"; Description: "feature"
Name: "app1\app3"; Description: "app 3"
Name: "app1\app3\child"; Description: "feature"
应用程序 1 可以自行安装,应用程序 2 可以与应用程序 3 分开安装 - 但选择应用程序 2 或应用程序 3 将强制包含应用程序 1。(是的,这将显示为一个可见的层次结构——但您可能应该无论如何都应该显示它,以便用户知道为什么他们的选择以这种方式被强制。)
另一种可能性:如果用户没有理由需要自行安装 app1,那么您可以将其从组件中完全删除。只需将条件从 更改Components: app1
为Components: app2 or app3
。(或者如果 app2 和 app3 是唯一的替代方案,并且它们都需要 app1,则完全删除该条件。)