我想构建一个 NSIS 脚本,它包含三个部分
- 主要部分
- 小节
- 部分共享
如果选中 Main 或 Minor,Shared 是不可见的并且将被安装。如果我启动安装程序,则会检查每个部分(主要,次要)。
现在它应该能够定义该部分(在静默安装中)。我有什么要改变的,只安装主要或次要或两者?
我想构建一个 NSIS 脚本,它包含三个部分
如果选中 Main 或 Minor,Shared 是不可见的并且将被安装。如果我启动安装程序,则会检查每个部分(主要,次要)。
现在它应该能够定义该部分(在静默安装中)。我有什么要改变的,只安装主要或次要或两者?
Name "Test"
Outfile "Test.exe"
;RequestExecutionLevel ?
!include "Sections.nsh"
!include "LogicLib.nsh"
!include "FileFunc.nsh" ;For GetOptions
Page Components "" "" EnforceSectionDependencies
Page InstFiles
Section /o "Main" SID_MAIN
DetailPrint Main
SectionEnd
Section /o "Minor" SID_MINOR
DetailPrint Minor
SectionEnd
Section "" SID_SHARED
DetailPrint Shared
SectionEnd
!macro CheckSectionSwitch sw sid
${GetOptions} $0 '${sw}' $9
${IfNot} ${Errors}
StrCpy $1 1
!insertmacro SelectSection ${sid}
${EndIf}
!macroend
Function .onInit
${GetParameters} $0
StrCpy $1 0 ;Any section swithes?
ClearErrors
!insertmacro CheckSectionSwitch '/Main' ${SID_MAIN}
!insertmacro CheckSectionSwitch '/Minor' ${SID_MINOR}
${If} $1 = 0
;Set defaults
!insertmacro SelectSection ${SID_MAIN}
!insertmacro SelectSection ${SID_MINOR}
${EndIf}
call EnforceSectionDependencies
FunctionEnd
Function EnforceSectionDependencies
!insertmacro UnselectSection ${SID_SHARED}
${If} ${SectionIsSelected} ${SID_MAIN}
${OrIf} ${SectionIsSelected} ${SID_MINOR}
!insertmacro SelectSection ${SID_SHARED}
${EndIf}
FunctionEnd
您应该查看文档的Section management部分,特别是SectionSetFlags以更改部分选择。
此外,在使用 SubSections 和 InstTypes 示例时,如何控制部分选择可能会很有用。