NSIS腳本學習:NSIS編譯程序中默認的變量與常量

1、變量

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

2、常量

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或使用插件生成的臨時目錄的地址,這個目錄會在安裝程序運行結束時自動刪除。

3、示例程序

下面這段代碼是一個示例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

相關文章
相關標籤/搜索