LogicLib.nsh
程序的三种基本结构包括:顺序结构、分支结构、循环结构。顺序结构是最基本的结构,本文主要说明了如何在NSIS脚本中写出分支结构和循环结构。
最基本的分支结构和循环结构可以用StrCmp命令和Goto命令组成,但通过这种方式写出的代码可读性极差且难以调试。此时我们就需要用到头文件 LogicLib.nsh 中的功能了。
下面是一个示例程序,在“MyProgram”区域中输入我们要调试的代码:
!define DEBUG_PATH "E:\NSIS_Test\TmpProgram"
!define OUTPUT_PATH "E:\NSIS_Test\Output"
!define INSTALL_PATH "E:\NSIS_Test\Output"
!include LogicLib.nsh
Name "NSIS_VariableConstants_Test"
Caption "NSIS_VariableConstants_Test"
InstallDir ${INSTALL_PATH}
OutFile "Galatea.exe"
Section "My Program"
SetOutPath ${OUTPUT_PATH}
File /r "${DEBUG_PATH}\*.*"
; ----------------- 在这里输入要调试的代码 -----------------
SectionEnd
我使用 HM NSIS Edit 2.0.3 工具编辑NSIS脚本,使用编译工具 makensis.exe(版本号2.46) 进行编译。
点击 HM NIS Edit 中“NSIS菜单”下的“编译并运行”,即编译nsi文件并运行安装包。
LogicLib.nsh 中用于逻辑控制的语句,我都逐个写了例子,详见下文。
一、If 分支语句
例1.1:If - ElseIf - Else - EndIf
标准的 If 语句分支结构
var /GLOBAL test1
StrCpy $test1 'a'
${If} $test1 == 'a'
DetailPrint '$$test1 的值为 a'
${ElseIf} $test1 == 'b'
DetailPrint '$$test1 的值为 b'
${Else}
DetailPrint '$$test1 的值为 $test1'
${EndIf}
运行结果:
$test1 的值为 a
例1.2:IfNot - Else - EndIf
IfNot 判断其后的表达式运算结果是否为假,与 If 的判断规则相反
var /GLOBAL test2
StrCpy $test2 'z'
${IfNot} $test2 == 'a'
DetailPrint '$$test2 的值不为 a'
${Else}
DetailPrint '$$test2 的值为 $test2'
${EndIf}
运行结果:
$test2 的值不为 a
例1.3:If - ElseIf - ElseIfNot - EndIf
ElseIfNot 判断其后的表达式运算结果是否为假,与 ElseIf 的判断规则相反
var /GLOBAL test3
StrCpy $test3 'b'
${If} $test3 == 'a'
DetailPrint '$$test3 的值为 a'
${ElseIfNot} $test3 == 'b'
DetailPrint '$$test3 的值不为 b'
${Else}
DetailPrint '$$test3 的值为 $test3'
${EndIf}
运行结果:
$test3 的值为 b
例1.4:IfNot & Unless
Unless 与 IfNot 是等价的
var /GLOBAL test4
StrCpy $test4 'z'
${Unless} $test4 == 'a'
DetailPrint '$$test4 的值不为 a'
${Else}
DetailPrint '$$test4 的值为