具有可选组件的多种 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
我已经尝试了一些不同的东西,但没有一个能成功地达到我的需要。我试过:
- 将
Flags: iscustom
添加到两种设置类型(我的想法是表明两者都是可定制的)。但是,Inno Setup 似乎只允许一种可自定义的类型。
- 仅使一种设置类型具有
Flags: iscustom
(例如将其添加到 TYPE_INSTRUCTOR
)。但是,这并不像我想要的那样工作,因为我最终可能会得到无效的组合,例如我可以 select Instructor 和 Student 组件的混合。
我能想到的解决这个问题的唯一方法是为每个可能的组合设置类型。那是不切实际的(这个例子不是我的真正问题,只是一个简单的例子来说明它,我最终会得到一个非常大的设置类型列表)。
提前感谢您提供任何可行的解决方案。
这不可能。至少在没有使用 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"
我正在尝试创建一个 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
我已经尝试了一些不同的东西,但没有一个能成功地达到我的需要。我试过:
- 将
Flags: iscustom
添加到两种设置类型(我的想法是表明两者都是可定制的)。但是,Inno Setup 似乎只允许一种可自定义的类型。 - 仅使一种设置类型具有
Flags: iscustom
(例如将其添加到TYPE_INSTRUCTOR
)。但是,这并不像我想要的那样工作,因为我最终可能会得到无效的组合,例如我可以 select Instructor 和 Student 组件的混合。
我能想到的解决这个问题的唯一方法是为每个可能的组合设置类型。那是不切实际的(这个例子不是我的真正问题,只是一个简单的例子来说明它,我最终会得到一个非常大的设置类型列表)。
提前感谢您提供任何可行的解决方案。
这不可能。至少在没有使用 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"