windows - Inno Setup 组件之间的动态依赖

标签 windows inno-setup

我有三个组成部分。其中两个都依赖于第三个。当检查其他两个组件中的任何一个以进行安装时,是否有一种编程方式可以自动选中第三个组件的复选框?

此行为类似于嵌套组件的行为,但它们处于同一级别,我无法使用该功能。如果 Inno 提供一种组件间依赖关系的方法,那就太好了,但在那之前......

更新
也许我设想的一个虚构的例子会有所帮助:

[Components]
Name: "parent1"; Description: "app 1"
Name: "parent2"; Description: "app 2"; Depends: parent1
Name: "parent2\child"; Description: "feature"
Name: "parent3"; Description: "app 3"; Depends: parent1
Name: "parent3\child"; Description: "feature"

最佳答案

默认情况下,选择子组件也会自动选择其父组件(尽管您可以禁用它)。不过,这听起来正是您想要的行为——您只是在倒过来考虑它。

假设您有组件 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 本身。如果您只是自己测试复选框并且没有添加组件: 条件语句然后你必须添加 Flags: checkablealone 到 B 以获得所需的行为。)

为了更接近你上面的例子,试试这个:

[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,则完全删除该条件。)

关于windows - Inno Setup 组件之间的动态依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15749616/

相关文章:

windows - 调试多线程应用程序后出现系统错误

windows - Inno Setup 脚本中的基本 IP 验证

c - Windows C API : Create and name a new process that sleeps

linux - 如何查看 Git cmd 使用的是哪个 gpg homedir 版本和 `homedir`?

javascript - React Native 端口 8081 问题 : 403 Forbidden

inno-setup - MsgBox - 制作不可点击的确定按钮并更改为倒计时 - Inno Setup

installation - Inno 设置为 .msi 的 Bootstrap

delphi - Inno Setup ComponentsList OnClick 事件

xml - Inno Setup - XML 编辑 XPath 请求失败,错误代码为 "NIL Interface Exception at runtime"

linux - Windows是否可以进行无密码身份验证