2023年12月3日发(作者:)
NSIS脚本学习:NSIS编译程序中默认的变量与常量一、变量NSIS脚本使用var关键字定义变量,使用StrCpy命令为变量赋值,下面是一个使用变量的例子var myVariableFunction .onInit StrCpy $myVariable "MyVariable" MessageBox MB_OK $myVariableFunctionEndNSIS脚本中所有的变量都是全局变量,也可以用“/GLOBAL”显式指定变量为全局变量(在callback、Section内声明时则必须用GLOBAL显式指定)var /GLOBAL myVariableNSIS脚本中的变量名可以由数字(0-9)、字母(a-z、A-Z)和下划线(_)构成,变量名的长度最多为1024个字符在NSIS脚本中,有20个预置的变量:$0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$R0,$R1,$R2,$R3,$R4,$R5,$R6,$R7,$R8,$R9这些变量和你自己写的变量用法是一样的,但通常用于共享的方法和宏中。这些变量不需要专门去声明,建议使用栈(stack)来存放这些变量的值。这些变量也可被用于插件(plug-in)间的通信,因为它们可被插件DLL文件读写。另外还有四个变量:1、$INSTDIR:安装目录可以用StrCpy、ReadRegStr、ReadINIStr等函数赋值,也可用下面的方法赋值InstallDir "E:NSIS_TestOutput"2、$OUTDIR:当前的输出目录可以用StrCpy、ReadRegStr、ReadINIStr等函数赋值,也可用下面的方法赋值SetOutPath "E:NSIS_TestOutput"3、$CMDLINE:进入安装包的命令行如NSIS脚本执行完毕后生成的安装包名为,在命令行中输入“ -1 -2 -3”打开安装包,则变量$CMDLINE的值就会被赋为“ -1 -2 -3”4、$LANGUAGE:当前使用的语言可以在.onInit回调中指定语言,如英语(美国)是1033,简体中文是2052Windows的语言代码可以查阅MSDN上相关文档:Regional and language settings (Windows SharePoint Services 2.0)二、常量NSIS脚本中有大量系统预定义好的常量可以使用。不过需要注意的是,常量有它的使用范围,一些新加入的常量并不是每个操作系统都能适用。如$CDBURN_AREA只能作用于WinXP及以上版本的Windows操作系统。1、$PROGRAMFILES、$PROGRAMFILES32、$PROGRAMFILES64 - ProgramFiles目录地址在安装包运行时动态确定,在Windows(x64)系统中,$PROGRAMFILES会指向“C:Program Files(x86)”,$PROGRAMFILES64会指向“C:Program Files”。我的电脑是32位的Win7操作系统,因此在我的电脑上程序运行时这三个常量的值都为:C:Program Files2、$COMMONFILES、$COMMONFILES32、$COMMONFILES64 - CommonFiles目录地址该目录一般都在ProgramFiles目录下,这个地址的路径会在安装包运行时动态确定,因为前半部分有ProgramFiles目录,所以根据x86、x64系统的不同也被分为了三个常量。我的电脑上程序运行时这三个常量的值都为:C:Program FilesCommon Files3、$DESKTOP - Windows桌面地址这个常量的上下文依赖于SetShellVarContext命令的设置,默认值为当前用户(即程序安装到当前用户的桌面上)。我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusDesktop4、$EXEDIR、$EXEFILE、$EXEPATH - 安装包的路径、文件名$EXEDIR是安装包所在的目录,如E:NSIS_Test;$EXEFILE是安装程序文件名,如;$EXEPATH是前两和拼合到一起的安装文件全路径,如E:NSIS_5、${NSISDIR} - NSIS程序的安装目录地址如需使用NSIS目录下的图标等资源时会用到,我的电脑上此值为:D:NSIS6、$WINDIR - Windows目录地址该地址在安装程序运行时确定,我电脑上此值为:C:Windows7、$SYSDIR - Windows下system目录地址该地址在安装程序运行时确定,我电脑上此值为:C:Windowssystem328、$TEMP - 系统临时目录地址该地址在安装程序运行时确定,我电脑上此值为:C:UsersTsybiusAppDataLocalTemp9、$STARTMENU - 开始菜单地址该地址在安装程序运行时确定,默认使用当前用户的开始菜单地址。我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataRoamingMicrosoftWindowsStart Menu10、$SMPROGRAMS - 开始菜单下Programs地址该地址在安装程序运行时确定,默认使用当前用户的开始菜单地址。我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataRoamingMicrosoftWindowsStartMenuPrograms11、$QUICKLAUNCH - 快速启动栏适用于IE4和以上版本的IE浏览器,如果QuickLaunch功能被禁用了,则返回$TEMP的值。我电脑上此值为:C:UsersTsybiusAppDataRoamingMicrosoftInternet ExplorerQuick Launch12、$DOCUMENTS - “我的文档”目录地址这个常量对未安装IE4的Windows95系统无效我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusDocuments13、$SENDTO - “发送到”目录地址我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataRoamingMicrosoftWindowsSendTo这是我电脑里的SendTo目录截图:右键单击一个程序时,会有“发送到”菜单,里面的快捷方式就放在这里,如下图:14、$RECENT - “最近使用的项目”目录地址这个目录记录了最近使用的文档的快捷方式我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataRoamingMicrosoftWindowsRecent15、$FAVORITES - IE浏览器“收藏夹”目录地址这个常量对未安装IE4的Windows95系统无效我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusFavorites16、$MUSIC - “我的音乐”目录地址这个常量对Windows XP、ME及以上版本有效我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusMusic17、$PICTURES - “我的图片”目录地址这个常量对Windows 2000、XP、ME及以上版本有效我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusPictures18、$VIDEOS - “我的视频”目录地址这个常量对Windows XP、ME及以上版本有效我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusVideos19、$NETHOOD - “网络位置”目录地址这个常量对未安装IE4的Windows95系统或未安装活动桌面的Windows系统无效这个目录下的文件可在“我的电脑”中的“网络位置”栏目下看到。我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataRoamingMicrosoftWindowsNetworkShortcuts20、$FONTS - “字体”目录地址存放了电脑上安装的所有字体我的电脑上此常量的值为:C:WindowsFonts21、$TEMPLATES - “模板”目录地址我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataRoamingMicrosoftWindowsTemplates22、$APPDATA - AppData下的Roaming目录地址AppData目录一般用于存放软件的配置和临时文件这个常量对未安装IE4的Windows95系统或未安装活动桌面的Windows系统无效我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataRoaming23、$LOCALAPPDATA - AppData下的Local目录地址这个常量对Windows 2000及以上版本有效我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataLocal24、$PRINTHOOD - 打印相关目录地址这个常量对Windows 95、98无效我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataRoamingMicrosoftWindowsPrinterShortcuts25、$INTERNET_CACHE - “互联网缓存”目录地址这个常量对Windows 95、未安装活动桌面和IE4的Windows NT系统无效我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataLocalMicrosoftWindowsTemporary InternetFiles26、$COOKIES - Cookies目录地址这个常量对Windows 95、未安装活动桌面和IE4的Windows NT系统无效我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataRoamingMicrosoftWindowsCookies27、$HISTORY - “网页浏览历史”目录地址这个常量对Windows 95、未安装活动桌面和IE4的Windows NT系统无效我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataLocalMicrosoftWindowsHistory28、$PROFILE - “用户”目录地址这个常量对Windows 2000及以上版本有效我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybius29、$ADMINTOOLS - “开始菜单→程序→管理工具”目录地址这个常量对Windows 2000、ME及以上版本有效我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataRoamingMicrosoftWindowsStartMenuProgramsAdministrative Tools30、$RESOURCES - Windows下resources目录地址这个常量对Windows XP及以上版本有效我的电脑上此常量的值为:C:WindowsResources31、$RESOURCES_LOCALIZED - Windows下本地resources目录地址这个常量对Windows XP及以上版本有效我的电脑上此常量的值为:C:Windowsresources080432、$CDBURN_AREA - “临时刻录文件夹”目录地址这个常量对Windows XP及以上版本有效该目录存储待刻录的文件。我的电脑上用Tsybius用户登录时,这个常量的值为:C:UsersTsybiusAppDataLocalMicrosoftWindowsBurnBurn33、$HWNDPARENT - 父窗体的HWND如我的电脑上一次运行安装包时此常量的值为:59243034、$PLUGINSDIR第一次调用InitPluginsDir或使用插件生成的临时目录的地址,这个目录会在安装程序运行结束时自动删除。三、示例程序下面这段代码是一个示例NSIS脚本的代码:!define DEBUG_PATH "E:NSIS_TestTmpProgram"!define OUTPUT_PATH "E:NSIS_TestOutput"!define INSTALL_PATH "E:NSIS_TestOutput"Name "NSIS_VariableConstants_Test"Caption "NSIS_VariableConstants_Test"InstallDir ${INSTALL_PATH}OutFile ""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 "$$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_TestOutputExtract: ract: put folder: E:NSIS_TestOutput---- Writable Variables (START) ----$INSTDIR E:NSIS_TestOutput$OUTDIR E:NSIS_TestOutput$CMDLINE "E:NSIS_"$LANGUAGE 1033---- Writable Variables (FINISH) -------- Constants (START) ----$PROGRAMFILES C:Program Files$PROGRAMFILES32 C:Program Files$PROGRAMFILES64 C:Program Files$COMMONFILES C:Program FilesCommon Files$COMMONFILES32 C:Program FilesCommon Files$COMMONFILES64 C:Program FilesCommon Files$DESKTOP C:UsersTsybiusDesktop$EXEDIR E:NSIS_Test$EXEFILE $EXEPATH E:NSIS_$ {NSISDIR} D:NSIS$WINDIR C:Windows$SYSDIR C:Windowssystem32$TEMP C:UsersTsybiusAppDataLocalTemp$STARTMENU C:UsersTsybiusAppDataRoamingMicrosoftWindowsStart Menu$SMPROGRAMS C:UsersTsybiusAppDataRoamingMicrosoftWindowsStart MenuPrograms$QUICKLAUNCH C:UsersTsybiusAppDataRoamingMicrosoftInternet ExplorerQuick Launch$DOCUMENTS C:UsersTsybiusDocuments$SENDTO C:UsersTsybiusAppDataRoamingMicrosoftWindowsSendTo$RECENT C:UsersTsybiusAppDataRoamingMicrosoftWindowsRecent$FAVORITES C:UsersTsybiusFavorites$MUSIC C:UsersTsybiusMusic$PICTURES C:UsersTsybiusPictures$VIDEOS C:UsersTsybiusVideos$NETHOOD C:UsersTsybiusAppDataRoamingMicrosoftWindowsNetwork Shortcuts$FONTS C:WindowsFonts$TEMPLATES C:UsersTsybiusAppDataRoamingMicrosoftWindowsTemplates$APPDATA C:UsersTsybiusAppDataRoaming$LOCALAPPDATA C:UsersTsybiusAppDataLocal$PRINTHOOD C:UsersTsybiusAppDataRoamingMicrosoftWindowsPrinter Shortcuts$INTERNET_CACHE C:UsersTsybiusAppDataLocalMicrosoftWindowsTemporary Internet Files$COOKIES C:UsersTsybiusAppDataRoamingMicrosoftWindowsCookies$HISTORY C:UsersTsybiusAppDataLocalMicrosoftWindowsHistory$PROFILE C:UsersTsybius$ADMINTOOLS C:UsersTsybiusAppDataRoamingMicrosoftWindowsStart MenuProgramsAdministrative Tools$RESOURCES C:Windowsresources$RESOURCES_LOCALIZED C:Windowsresources0804$CDBURN_AREA C:UsersTsybiusAppDataLocalMicrosoftWindowsBurnBurn$HWNDPARENT 657012$PLUGINSDIR
---- Constants (FINISH) ----Completed注:本文写作过程中参考了NSIS官方使用手册


发布评论