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