NSIS脚本使用var关键字定义变量,使用StrCpy命令为变量赋值,下面是一个使用变量的例子浏览器
var myVariable Function .onInit StrCpy $myVariable "MyVariable" MessageBox MB_OK $myVariable FunctionEnd
NSIS脚本中全部的变量都是全局变量,也能够用“/GLOBAL”显式指定变量为全局变量(在callback、Section内声明时则必须用GLOBAL显式指定)缓存
var /GLOBAL myVariable
NSIS脚本中的变量名能够由数字(0-9)、字母(a-z、A-Z)和下划线(_)构成,变量名的长度最多为1024个字符
网络
在NSIS脚本中,有20个预置的变量:ide
$0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$R0,$R1,$R2,$R3,$R4,$R5,$R6,$R7,$R8,$R9函数
这些变量和你本身写的变量用法是同样的,但一般用于共享的方法和宏中。这些变量不须要专门去声明,建议使用栈(stack)来存放这些变量的值。这些变量也可被用于插件(plug-in)间的通讯,由于它们可被插件DLL文件读写。工具
另外还有四个变量:字体
一、$INSTDIR:安装目录ui
能够用StrCpy、ReadRegStr、ReadINIStr等函数赋值,也可用下面的方法赋值spa
InstallDir "E:\NSIS_Test\Output"
二、$OUTDIR:当前的输出目录操作系统
能够用StrCpy、ReadRegStr、ReadINIStr等函数赋值,也可用下面的方法赋值
SetOutPath "E:\NSIS_Test\Output"
三、$CMDLINE:进入安装包的命令行
如NSIS脚本执行完毕后生成的安装包名为Galatea.exe,在命令行中输入“Galatea.exe -1 -2 -3”打开安装包,则变量$CMDLINE的值就会被赋为“Galatea.exe -1 -2 -3”
四、$LANGUAGE:当前使用的语言
能够在.onInit回调中指定语言,如英语(美国)是1033,简体中文是2052
Windows的语言代码能够查阅MSDN上相关文档:
Regional and language settings (Windows SharePoint Services 2.0)
https://technet.microsoft.com/en-us/library/cc287874%28v=office.12%29.aspx
NSIS脚本中有大量系统预约义好的常量可使用。不过须要注意的是,常量有它的使用范围,一些新加入的常量并非每一个操做系统都能适用。如$CDBURN_AREA只能做用于WinXP及以上版本的Windows操做系统。
一、$PROGRAMFILES、$PROGRAMFILES3二、$PROGRAMFILES64 - ProgramFiles目录地址
在安装包运行时动态肯定,在Windows(x64)系统中,$PROGRAMFILES会指向“C:\Program Files (x86)”,$PROGRAMFILES64会指向“C:\Program Files”。
个人电脑是32位的Win7操做系统,所以在个人电脑上程序运行时这三个常量的值都为:C:\Program Files
二、$COMMONFILES、$COMMONFILES3二、$COMMONFILES64 - CommonFiles目录地址
该目录通常都在ProgramFiles目录下,这个地址的路径会在安装包运行时动态肯定,由于前半部分有ProgramFiles目录,因此根据x8六、x64系统的不一样也被分为了三个常量。
个人电脑上程序运行时这三个常量的值都为:C:\Program Files\Common Files
三、$DESKTOP - Windows桌面地址
这个常量的上下文依赖于SetShellVarContext命令的设置,默认值为当前用户(即程序安装到当前用户的桌面上)。
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\Desktop
四、$EXEDIR、$EXEFILE、$EXEPATH - 安装包的路径、文件名
$EXEDIR是安装包所在的目录,如E:\NSIS_Test;$EXEFILE是安装程序文件名,如Galatea.exe;$EXEPATH是前两和拼合到一块儿的安装文件全路径,如E:\NSIS_Test\Galatea.exe
五、${NSISDIR} - NSIS程序的安装目录地址
如需使用NSIS目录下的图标等资源时会用到,个人电脑上此值为:D:\NSIS
六、$WINDIR - Windows目录地址
该地址在安装程序运行时肯定,我电脑上此值为:C:\Windows
七、$SYSDIR - Windows下system目录地址
该地址在安装程序运行时肯定,我电脑上此值为:C:\Windows\system32
八、$TEMP - 系统临时目录地址
该地址在安装程序运行时肯定,我电脑上此值为:C:\Users\Tsybius\AppData\Local\Temp
九、$STARTMENU - 开始菜单地址
该地址在安装程序运行时肯定,默认使用当前用户的开始菜单地址。
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Start Menu
十、$SMPROGRAMS - 开始菜单下Programs地址
该地址在安装程序运行时肯定,默认使用当前用户的开始菜单地址。
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
十一、$QUICKLAUNCH - 快速启动栏
适用于IE4和以上版本的IE浏览器,若是QuickLaunch功能被禁用了,则返回$TEMP的值。
我电脑上此值为:C:\Users\Tsybius\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch
十二、$DOCUMENTS - “个人文档”目录地址
这个常量对未安装IE4的Windows95系统无效
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\Documents
1三、$SENDTO - “发送到”目录地址
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\SendTo
这是我电脑里的SendTo目录截图:
右键单击一个程序时,会有“发送到”菜单,里面的快捷方式就放在这里,以下图:
1四、$RECENT - “最近使用的项目”目录地址
这个目录记录了最近使用的文档的快捷方式
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Recent
1五、$FAVORITES - IE浏览器“收藏夹”目录地址
这个常量对未安装IE4的Windows95系统无效
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\Favorites
1六、$MUSIC - “个人音乐”目录地址
这个常量对Windows XP、ME及以上版本有效
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\Music
1七、$PICTURES - “个人图片”目录地址
这个常量对Windows 2000、XP、ME及以上版本有效
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\Pictures
1八、$VIDEOS - “个人视频”目录地址
这个常量对Windows XP、ME及以上版本有效
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\Videos
1九、$NETHOOD - “网络位置”目录地址
这个常量对未安装IE4的Windows95系统或未安装活动桌面的Windows系统无效
这个目录下的文件可在“个人电脑”中的“网络位置”栏目下看到。
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Network Shortcuts
20、$FONTS - “字体”目录地址
存放了电脑上安装的全部字体
个人电脑上此常量的值为:C:\Windows\Fonts
2一、$TEMPLATES - “模板”目录地址
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Templates
2二、$APPDATA - AppData下的Roaming目录地址
AppData目录通常用于存放软件的配置和临时文件
这个常量对未安装IE4的Windows95系统或未安装活动桌面的Windows系统无效
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Roaming
2三、$LOCALAPPDATA - AppData下的Local目录地址
这个常量对Windows 2000及以上版本有效
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Local
2四、$PRINTHOOD - 打印相关目录地址
这个常量对Windows 9五、98无效
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
2五、$INTERNET_CACHE - “互联网缓存”目录地址
这个常量对Windows 9五、未安装活动桌面和IE4的Windows NT系统无效
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Local\Microsoft\Windows\Temporary Internet Files
2六、$COOKIES - Cookies目录地址
这个常量对Windows 9五、未安装活动桌面和IE4的Windows NT系统无效
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Cookies
2七、$HISTORY - “网页浏览历史”目录地址
这个常量对Windows 9五、未安装活动桌面和IE4的Windows NT系统无效
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Local\Microsoft\Windows\History
2八、$PROFILE - “用户”目录地址
这个常量对Windows 2000及以上版本有效
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius
2九、$ADMINTOOLS - “开始菜单→程序→管理工具”目录地址
这个常量对Windows 2000、ME及以上版本有效
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools
30、$RESOURCES - Windows下resources目录地址
这个常量对Windows XP及以上版本有效
个人电脑上此常量的值为:C:\Windows\Resources
3一、$RESOURCES_LOCALIZED - Windows下本地resources目录地址
这个常量对Windows XP及以上版本有效
个人电脑上此常量的值为:C:\Windows\resources\0804
3二、$CDBURN_AREA - “临时刻录文件夹”目录地址
这个常量对Windows XP及以上版本有效
该目录存储待刻录的文件。
个人电脑上用Tsybius用户登陆时,这个常量的值为:C:\Users\Tsybius\AppData\Local\Microsoft\Windows\Burn\Burn
3三、$HWNDPARENT - 父窗体的HWND
如个人电脑上一次运行安装包时此常量的值为:592430
3四、$PLUGINSDIR
第一次调用InitPluginsDir或使用插件生成的临时目录的地址,这个目录会在安装程序运行结束时自动删除。
下面这段代码是一个示例NSIS脚本的代码:
!define DEBUG_PATH "E:\NSIS_Test\TmpProgram" !define OUTPUT_PATH "E:\NSIS_Test\Output" !define INSTALL_PATH "E:\NSIS_Test\Output" Name "NSIS_VariableConstants_Test" Caption "NSIS_VariableConstants_Test" InstallDir ${INSTALL_PATH} OutFile "Galatea.exe" Section "My Program" SetOutPath ${OUTPUT_PATH} File /r "${DEBUG_PATH}\*.*" DetailPrint "" DetailPrint "---- Writable Variables (START) ----" DetailPrint "$$INSTDIR $INSTDIR" DetailPrint "$$OUTDIR $OUTDIR" DetailPrint "$$CMDLINE $CMDLINE" DetailPrint "$$LANGUAGE $LANGUAGE" DetailPrint "---- Writable Variables (FINISH) ----" DetailPrint "" DetailPrint "---- Constants (START) ----" DetailPrint "$$PROGRAMFILES $PROGRAMFILES" DetailPrint "$$PROGRAMFILES32 $PROGRAMFILES32" DetailPrint "$$PROGRAMFILES64 $PROGRAMFILES64" DetailPrint "$$COMMONFILES $COMMONFILES" DetailPrint "$$COMMONFILES32 $COMMONFILES32" DetailPrint "$$COMMONFILES64 $COMMONFILES64" DetailPrint "$$DESKTOP $DESKTOP" DetailPrint "$$EXEDIR $EXEDIR" DetailPrint "$$EXEFILE $EXEFILE" DetailPrint "$$EXEPATH $EXEPATH" DetailPrint "$$ {NSISDIR} ${NSISDIR}" DetailPrint "$$WINDIR $WINDIR" DetailPrint "$$SYSDIR $SYSDIR" DetailPrint "$$TEMP $TEMP" DetailPrint "$$STARTMENU $STARTMENU" DetailPrint "$$SMPROGRAMS $SMPROGRAMS" DetailPrint "$$QUICKLAUNCH $QUICKLAUNCH" DetailPrint "$$DOCUMENTS $DOCUMENTS" DetailPrint "$$SENDTO $SENDTO" DetailPrint "$$RECENT $RECENT" DetailPrint "$$FAVORITES $FAVORITES" DetailPrint "$$MUSIC $MUSIC" DetailPrint "$$PICTURES $PICTURES" DetailPrint "$$VIDEOS $VIDEOS" DetailPrint "$$NETHOOD $NETHOOD" DetailPrint "$$FONTS $FONTS" DetailPrint "$$TEMPLATES $TEMPLATES" DetailPrint "$$APPDATA $APPDATA" DetailPrint "$$LOCALAPPDATA $LOCALAPPDATA" DetailPrint "$$PRINTHOOD $PRINTHOOD" DetailPrint "$$INTERNET_CACHE $INTERNET_CACHE" DetailPrint "$$COOKIES $COOKIES" DetailPrint "$$HISTORY $HISTORY" DetailPrint "$$PROFILE $PROFILE" DetailPrint "$$ADMINTOOLS $ADMINTOOLS" DetailPrint "$$RESOURCES $RESOURCES" DetailPrint "$$RESOURCES_LOCALIZED $RESOURCES_LOCALIZED" DetailPrint "$$CDBURN_AREA $CDBURN_AREA" DetailPrint "$$HWNDPARENT $HWNDPARENT" DetailPrint "$$PLUGINSDIR $PLUGINSDIR" DetailPrint "---- Constants (FINISH) ----" DetailPrint "" SectionEnd
编译后程序运行时打印的安装详细信息以下:
打印出的内容以下:
Output folder: E:\NSIS_Test\Output Extract: MyProgram.exe Extract: ReadMe.txt Output folder: E:\NSIS_Test\Output ---- Writable Variables (START) ---- $INSTDIR E:\NSIS_Test\Output $OUTDIR E:\NSIS_Test\Output $CMDLINE "E:\NSIS_Test\Galatea.exe" $LANGUAGE 1033 ---- Writable Variables (FINISH) ---- ---- Constants (START) ---- $PROGRAMFILES C:\Program Files $PROGRAMFILES32 C:\Program Files $PROGRAMFILES64 C:\Program Files $COMMONFILES C:\Program Files\Common Files $COMMONFILES32 C:\Program Files\Common Files $COMMONFILES64 C:\Program Files\Common Files $DESKTOP C:\Users\Tsybius\Desktop $EXEDIR E:\NSIS_Test $EXEFILE Galatea.exe $EXEPATH E:\NSIS_Test\Galatea.exe $ {NSISDIR} D:\NSIS $WINDIR C:\Windows $SYSDIR C:\Windows\system32 $TEMP C:\Users\Tsybius\AppData\Local\Temp $STARTMENU C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Start Menu $SMPROGRAMS C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Start Menu\Programs $QUICKLAUNCH C:\Users\Tsybius\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch $DOCUMENTS C:\Users\Tsybius\Documents $SENDTO C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\SendTo $RECENT C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Recent $FAVORITES C:\Users\Tsybius\Favorites $MUSIC C:\Users\Tsybius\Music $PICTURES C:\Users\Tsybius\Pictures $VIDEOS C:\Users\Tsybius\Videos $NETHOOD C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Network Shortcuts $FONTS C:\Windows\Fonts $TEMPLATES C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Templates $APPDATA C:\Users\Tsybius\AppData\Roaming $LOCALAPPDATA C:\Users\Tsybius\AppData\Local $PRINTHOOD C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Printer Shortcuts $INTERNET_CACHE C:\Users\Tsybius\AppData\Local\Microsoft\Windows\Temporary Internet Files $COOKIES C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Cookies $HISTORY C:\Users\Tsybius\AppData\Local\Microsoft\Windows\History $PROFILE C:\Users\Tsybius $ADMINTOOLS C:\Users\Tsybius\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools $RESOURCES C:\Windows\resources $RESOURCES_LOCALIZED C:\Windows\resources\0804 $CDBURN_AREA C:\Users\Tsybius\AppData\Local\Microsoft\Windows\Burn\Burn $HWNDPARENT 657012 $PLUGINSDIR ---- Constants (FINISH) ---- Completed
注:本文写做过程当中参考了NSIS官方使用手册 NSIS.chm
END