NSIS学习笔记
MessageBox MB_OK '$$0 is "$0"' ;$0是某个值
${If} $0 == 'some value'
MessageBox MB_OK '$$0 is some value'
${ElseIf} $0 == 'some other value'
MessageBox MB_OK '$$0 is some other value'
${Else}
MessageBox MB_OK '$$0 is "$0"'
${EndIf}
logiclib 就是使用${IF} 语句 ${while}循环
IntOp
用户变量输出
outfile "xunh.exe"
!include "logiclib.nsh"
section
StrCpy $R1 0
${While} $R1 < 5
IntOp $R1 $R1 + 1
DetailPrint $R1
${EndWhile}
sectionend
page license ;许可协议页面
page components;安装的组件
page directory ;安装的目录
page instfiles ;选择的组件
uninstpage uninstconfirm ;卸载确认页面
uninstpage instfiles ;卸载
使用在段里的指令和安装程序属性指令不一样,他们在用户电脑运行环境里执行。这些指令可以解压文件读取和写入注册表、INI文件或普通文件,创建目录,创建快捷方式和更多功能。你可以在 指令 找到更多。
更多的基本用法说明 SetOutPath 告诉安装程序要把文件输出到哪里,和要解压哪些 文件。
回调函数就相当与一个调用函数,在安装程序一开始就调用而已
除了区段里的代码,还有一些在回调函数里的代码也会被执行,而且可能会在区段之前就执行了。比如 .onInit 回调函数就最先被执行,或者在页面显示过程中执行某些 页面回调函数。
outfile "xunh.exe"
!include "logiclib.nsh"
section
StrCpy $R1 0
${While} $R1 < 5
IntOp $R1 $R1 + 1
DetailPrint $R1
${EndWhile}
sectionend
Function .onInit
MessageBox MB_YESNO "即将安装我的程序,要继续吗?" IDYES gogogo
Abort
gogogo:
FunctionEnd
条件判断或执行代码循环可以使用 StrCmp, IntCmp, IfErrors, Goto 和其它来实现
使用MessageBoxes 或 DetailPrint 来显示变量内容,对所有变量使用 DumpState 插件来勾画总体大纲。
定义符号可以通过 !define 定义或使用 /D 命令行切换。这些定义符号可以用于条件编译
(通过 !ifdef 定义)或用于符号替换(一种格式简单的宏)。若要用它的值替换一个符号,
请使用 ${符号} (如果没有定义符号,那么不会产生转换)。这个转换为 first-come-first-served,
一个插件的调用像这样:
DLL名::函数名 "参数1" "参数2" "参数3"
InstallOptions 是一个受欢迎的插件,它允许你建立自定义的的页面,并与 NSIS 页面命令结合(看 页面)。 开始菜单插件 提供了一个可允许用户选择一个开始菜单目录的页面。这里还有许多不同用途的大量插件,查看 Docs 目录 里的帮助文件和例子。你也可以在线查找另外的插件: NSIS 维客.
引号的作用是是可以包含‘”他们可以是单引号、双引号或向后的单引号。
$INSTDIR 安装目录
$OUTDIR当前输出路径
$CMDLINE安装程序的命令行输入。
$LANGUAGE
下面这些都是常量
当前使用的语言标识符
$DESKTOP
Windows 桌面目录(通常为 C:\Windows\Desktop 但是运行时会检测)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。
$EXEDIR
安装程序运行时的位置。(从技术上来说你可以修改此变量,但并不是一个好方法)。
$EXEFILE
安装程序的名称。
$EXEPATH
安装程序运行时的完整路径。
${NSISDIR}
包含 NSIS 安装目录的符号定义标记。常用于在你想调用在 NSIS 目录下的资源时,例如:图标、界面……
$SYSDIR
Windows 系统目录(通常为 C:\Windows\System 或 C:\WinNT\System32 但在运行时会检测)。
$STARTMENU
开始菜单目录(常用于添加一个开始菜单项,使用 CreateShortCut)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。
$SMPROGRAMS
开始菜单程序目录(当你想定位 $STARTMENU\程序 时可以使用它)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。
$SMSTARTUP
开始菜单程序/启动 目录。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。
$ \r \n \t
要显示
必须使用下面的这个
$
转义,用来表示 $。
$\r
用来表示一个回车(\r)。
$\n
用来表示新的一行(\n)。
$\t
用来表示一个 Tab(\t)。
在引号里面加入 "${sec2_id} 的名称:$\n$0" $\n 表示新的一行,且不显示,去掉$将显示
每个内建的页面都有三个回调函数。一个预置函数、一个显示创建函数和一个离开函数
一个自定义的页面仅有两个回调函数,一个是必须的创建页面,另一个离开函数的作用就和内建页面的离开函数一样。
Page
custom [创建函数] [离开函数] [标题] [/ENABLECANCEL]
或
内置的页面类型 [预置函数] [显示函数] [离开函数] [/ENABLECANCEL]
要添加一个安装程序页面,请看上面关于相对于自定义页面的内建页面和关于回调函数的段。
内置的页面类型 :
license - 许可协议页面
components - 组件选择页面
directory - 安装目录选择页面
instfiles - 安装执行页面
uninstConfirm - 卸载确认页面
" "引号好像在NSIS里面没有用
StrCpy $0 1
MessageBox MB_OK '$0' 就显示1
StrCpy $0 1
MessageBox MB_OK '$0 is $0 ' 1 is 1
学会了调试
看到了
一般函数名以 . 开头的(例如 ".Whatever")作为回调函数保留
也就是说:以.开头的是回调函数
SendMessage
窗口句柄 消息 第一个消息参数 第二个消息参数 [用户变量(返回值)] [/TIMEOUT=毫秒]
AddBrandingImage
(left|right|top|bottom) (宽|高)
AddBrandingImage left 0
AddBrandingImage right 50
AddBrandingImage top 20
AddBrandingImage bottom 35
AddBrandingImage left 100 5
安装程序界面 ,默认为0
页面选项
下面的这个列表列出了某个页面类型受什么样的命令影响。除非特别提及,否则这些命令都可以在 PageEx 区块内外使用。如果在一个 PageEx 区块内部使用那么他们仅仅对由 PageEx 设置的当前页面产生影响,否则他们将被设为其他所有页面的默认值。
许可页面
LicenseText
LicenseData
LicenseForceSelection
组件选择页面
ComponentText
目录选择页面
DirText
DirVar - 仅能在 PageEx 里使用。
DirVerify
卸载、安装记录页面
DetailsButtonText
CompletedText
卸载确认页面
DirVar - 仅能在 PageEx 里使用。
UninstallText
要设置页面标题请使用 Caption。
Icon
[路径\]图标文件.ico
设置安装程序的图标。在图标文件里的每一个图标将会被包含在安装程序里
icon 功能强大,输出的EXE文件图标和安装时用的图标都是它
例如它:icon f:\tub\LD.ico
$INSTDIR
安装目录
是安装变量
$PROGRAMFILES是安装常量
$language 是变量,英语是1033
繁体中文是1028
简体中文是2052
WriteRegStr是写入注册表
解决了注册表的问题
WriteRegStr HKLM software\loadmaster version "4.0"
writeregstr HKLM software\loadmaster path "$INSTDIR"
$instdir 是变量,路径,解决。
呵呵,又测试成功
InstallDir $programfiles\Loadmaster1
InstallDirRegKey HKLM Software\loadmaster path
InstallDirRegKey 的作用是检测以前的安装路径
LoadLanguageFile
语言文件.nlf
载入语言文件
loadlanguagefile "D:\Program Files\NSIS\Contrib\Language files\SimpChinese.nlf"
;loadlanguagefile "D:\Program Files\NSIS\Contrib\Language files\English.nlf"
如果用;loadlanguagefile SimpChinese.nlf
loadlanguagefile English.nlf
不知道缺少了哪个头文件
$LANGUAGE
当前使用的语言标识符,是一个变量。
使用loadlanguagefile对于的语言 ID将会被定义(例如: ${LANG_ENGLISH} 将会被定义为 1033)。
检测语言,然后显示许可 功能已经完成
LicenseLangString ln ${LANG_SIMPCHINESE} f:\cnlicence.txt
LicenseLangString ln ${LANG_ENGLISH} f:\enlicence.txt
LicenseLangString license ${LANG_TRADCHINESE} f:\tnlicence.txt
LicenseData $(ln)
Pop
用户变量(输出)
从堆栈里弹出一个字串到用户变量 $x。如果堆栈是空的,则会置一个错误标记。
Push 1
Push 2
Exch
Pop $0 # = 1
弹出 1赋值给变量 $0
学会了SWITCH 语句
outfile "switch.exe"
!include "LogicLib.nsh"
page instfiles
section
StrCpy $0 "2"
${switch} $0
${Case} 1
SetOutPath "$programfiles"
file "f:\tub\pic.bmp"
${Break}
${Case} 2
SetOutPath "$programfiles"
file "f:\tub\pic2.bmp"
${Break}
${EndSwitch}
sectionend