具有可选组件的多种 Inno 安装类型

Multiple Inno Setup Types that have optional Components

我正在尝试创建一个 Inno Setup 安装程序(使用 Inno Setup 6.2.0),它有多个设置 Types 其中多个可以有可选的 Components (以及固定组件) .例如,假设我想要以下设置类型:

如果 “Instructor” 安装类型是 selected,我想要 “Instructor - Fixed” 组件(必须安装),加上两个可选组件 "Instructor- Optional 1""Instructor - Optional 2".

对于 “学生” 安装类型,我想要一个固定组件和几个可选组件。

以下是我实验的起点:

[Types]
Name: TYPE_INSTRUCTOR ; Description: "Instructor" ;
Name: TYPE_STUDENT    ; Description: "Student" ;

[Components]
Name: COMP_INSTRUCTOR            ; Description: "Instructor"              ; Types: TYPE_INSTRUCTOR
Name: COMP_INSTRUCTOR\FIXED      ; Description: "Instructor - Fixed"      ; Types: TYPE_INSTRUCTOR ; Flags: fixed
Name: COMP_INSTRUCTOR\OPTIONAL_1 ; Description: "Instructor - Optional 1" ; Types: TYPE_INSTRUCTOR
Name: COMP_INSTRUCTOR\OPTIONAL_2 ; Description: "Instructor - Optional 2" ; Types: TYPE_INSTRUCTOR

Name: COMP_STUDENT            ; Description: "Student"                    ; Types: TYPE_STUDENT
Name: COMP_STUDENT\FIXED      ; Description: "Student - Fixed"            ; Types: TYPE_STUDENT ; Flags: fixed
Name: COMP_STUDENT\OPTIONAL_1 ; Description: "Student - Optional 1"       ; Types: TYPE_STUDENT
Name: COMP_STUDENT\OPTIONAL_2 ; Description: "Student - Optional 2"       ; Types: TYPE_STUDENT


[Files]
Source: "InstFixed.txt" ; DestDir: {app} ; Components: COMP_INSTRUCTOR\FIXED
Source: "InstOpt1.txt"  ; DestDir: {app} ; Components: COMP_INSTRUCTOR\OPTIONAL_1
Source: "InstOpt2.txt"  ; DestDir: {app} ; Components: COMP_INSTRUCTOR\OPTIONAL_2

Source: "StuFixed.txt" ; DestDir: {app} ; Components: COMP_STUDENT\FIXED
Source: "StuOpt1.txt"  ; DestDir: {app} ; Components: COMP_STUDENT\OPTIONAL_1
Source: "StuOpt2.txt"  ; DestDir: {app} ; Components: COMP_STUDENT\OPTIONAL_2

我已经尝试了一些不同的东西,但没有一个能成功地达到我的需要。我试过:

我能想到的解决这个问题的唯一方法是为每个可能的组合设置类型。那是不切实际的(这个例子不是我的真正问题,只是一个简单的例子来说明它,我最终会得到一个非常大的设置类型列表)。

提前感谢您提供任何可行的解决方案。

这不可能。至少在没有使用 Pascal 脚本进行大量定制的情况下是这样。


更简单的方法是完全放弃 Types 并使用两个顶级相互 exclusive 组件和几个可选的子组件:

[Types]
Name: "custom"; Description: "Custom installation"; Flags: iscustom

[Components]
Name: "intructor"; Description: "Instructor"; Flags: exclusive
Name: "intructor\opt1"; Description: "Optional 1"
Name: "intructor\opt2"; Description: "Optional 2"
Name: "student"; Description: "Student"; Flags: exclusive
Name: "student\opt1"; Description: "Optional 1"
Name: "student\opt2"; Description: "Optional 2"