nsis安裝包_樣本指令碼文法解析
上一節講了nsis安裝包_嚮導指令碼初級個人化,雖然末尾提到“更多個人化,敬請期待”,但在接下來的幾篇並不打算繼續介紹如何個人化指令碼,而是要迴歸到基礎文法和對NSIS的進一步認識。
上一節只是很生硬地在講解幾處個人化,如果對別人有協助的話,最多也只算授人以魚,根據那幾處個人化的修改,不可能想到還有哪些地方可以個人化和怎樣個人化。要想授人以漁,必須學習和分享更加通用的知識和技能。
首先文法是必不可少的,但即便是中文的,也很少有人願意系統閱讀協助文檔(不過這對程式員來說應該是小菜一碟)。本節主要針對上一節的嚮導指令碼涉及到的文法進行解析,以此開啟掌握文法的突破口。當文法和相關知識瞭解到一定程度後,再去系統閱讀協助檔案,查漏補缺,就會容易很多,而且對系統掌握NSIS很有協助。
如需要,可下載樣本指令碼:
http://download.csdn.net/detail/signjing/4540492
以下是代碼及解析,其中有底色的部分為指令碼內容。 注釋、!define、變數、!include、常量
; Script generated by the HM NIS Edit Script Wizard.
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "signjing安裝樣本"
!define PRODUCT_VERSION "0.0.0.1"
!define PRODUCT_PUBLISHER "signjing"
!define PRODUCT_WEB_SITE "http://blog.csdn.net/signjing"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\GenPat.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
; MUI 1.67 compatible ------
!include "MUI.nsh"
; MUI Settings
!define MUI_ABORTWARNING
......
;個人化圖素;
!define MUI_WELCOMEFINISHPAGE_BITMAP "C:\util\nsis_uis\白玉山塔.bmp"
!define MUI_WELCOMEPAGE_TITLE "\r\n signjing安裝樣本嚮導"
!define MUI_WELCOMEPAGE_TEXT " signjing安裝樣本是signjing開發的一個NSIS安裝樣本軟體。\r\n\r\n 軟體作者:signjing \r\n\r\n 官方網址:http://blog.csdn.net/signjing\r\n\r\n $_CLICK"
注釋
以 ; 或 #開始的行為注釋行。可以在命令後面添加註釋,也可以使用C規範的注釋來注釋一行或多行。如果參數需要由;或#開頭,可以用雙引號把它括起來。
如:
; 注釋
# 注釋
/*
注釋
注釋
*/ !define
[/date] 符號 [值]
這個命令將會向全域定義列表中添加“符號”。這個效果與對編譯器使用 /D命令列轉場效果相似。(只有在 !define 命令之後,定義才有效)
如果使用了 /date,則定義的值會被格式化為 strtime格式。strtime 會把代表當前的時間日期轉換為實際的值。例如 %H會轉換為目前時間的 24 小時格式。完整的格式化字串列表你可以尋找 MSDN。在 POSIX平台,你可以使用 man strtime 來擷取列表。
如:
!define USE_SOMETHING
!define VERSION 1.2
!define /date NOW "%H:%M:%S %d %b, %Y" 變數
所有的變數都是全域的並且可以用於區段和函數。需要注意的是,在預設情況下變數被限制在 1024位元組。要擴大這個限制你需要重新構建一個使用了更大 NSIS_MAX_STRLEN值的 NSIS 或使用特別版本。 !include
檔案這個命令可以將一個檔案包含到指令碼中,就像是指令碼的一部分一樣。請注意,如果一個檔案包含在了另一個目錄中,那麼目前的目錄仍是編譯指令碼的地方(不是要包含的檔案所在的目錄)。如果編譯器無法找到檔案,那麼它將會在每一個包含目錄中尋找。 常量
常量通常用在 InstallDir屬性裡。
需要注意的是一些新的常量並不是在所有的 OS上都是正常的。例如 $CDBURN_AREA 僅在 Windows XP及以上系統中才正常。如果在 Windows 98 中使用將會得到空值。除非特別提示,否則該常量都是在所有 OS上有效。
$PROGRAMFILES
程式檔案目錄(通常為 C:\Program Files但是運行時會檢測)。
$COMMONFILES
公用檔案目錄。這是應用程式共用組件的目錄(通常為 C:\Program Files\Common Files但是運行時會檢測)。
$DESKTOP
Windows 案頭目錄(通常為 C:\windows\desktop但是運行時會檢測)。該常量的內容(所有使用者或目前使用者)取決於 SetShellVarContext設定。預設為目前使用者。
$EXEDIR
安裝程式運行時的位置。(從技術上來說你可以修改改變數,但並不是一個好方法)。
${NSISDIR}
包含 NSIS 安裝目錄的一個標記。在編譯時間會檢測到。常用於在你想調用一個在 NSIS 目錄下的資源時,例如:表徵圖、介面……
$WINDIR
Windows 目錄(通常為 C:\windows或 C:\winnt 但在運行時會檢測)
$SYSDIR
Windows 系統目錄(通常為 C:\windows\system或 C:\winnt\system32 但在運行時會檢測)
$TEMP
系統臨時目錄(通常為 C:\windows\temp但在運行時會檢測)
$STARTMENU
開始菜單目錄(常用於添加一個開始功能表項目,使用 CreateShortCut)。該常量的內容(所有使用者或目前使用者)取決於 SetShellVarContext 設定。預設為目前使用者。
$SMPROGRAMS
開始菜單程式目錄(當你想定位 $STARTMENU\程式時可以使用它)。該常量的內容(所有使用者或目前使用者)取決於 SetShellVarContext 設定。預設為目前使用者。
$SMSTARTUP
開始菜單程式/啟動目錄。該常量的內容(所有使用者或目前使用者)取決於 SetShellVarContext設定。預設為目前使用者。
$QUICKLAUNCH
在 IE4 活動案頭及以上的快速啟動目錄。如果快速啟動不可用,僅僅返回和 $TEMP一樣。
$DOCUMENTS
文檔目錄。一個目前使用者典型的路徑形如 C:\Documents and Settings\Foo\My Documents。這個常量的內容(所有使用者或目前使用者)取決於 SetShellVarContext 設定。預設為目前使用者。該常量在 Windows 95且 Internet Explorer 4 沒有安裝時無效。
$SENDTO
該目錄包含了“發送到”菜單快捷項。
$RECENT
該目錄包含了指向使用者最近文檔的捷徑。
$FAVORITES
該目錄包含了指向使用者網路收藏夾、文檔等的捷徑。這個常量的內容(所有使用者或目前使用者)取決於 SetShellVarContext設定。預設為目前使用者。該常量在 Windows 95 且 Internet Explorer 4沒有安裝時無效。
$MUSIC
使用者的音樂檔案目錄。這個常量的內容(所有使用者或目前使用者)取決於 SetShellVarContext設定。預設為目前使用者。該常量僅在 Windows XP、ME及以上才有效。
$PICTURES
使用者的圖片目錄。這個常量的內容(所有使用者或目前使用者)取決於 SetShellVarContext設定。預設為目前使用者。該常量僅在 Windows 2000、XP、ME及以上才有效。
$VIDEOS
使用者的視頻檔案目錄。這個常量的內容(所有使用者或目前使用者)取決於 SetShellVarContext設定。預設為目前使用者。該常量僅在 Windows XP、ME及以上才有效。
$NETHOOD
該目錄包含了可能存在於我的網路位置、網路位置檔案夾的連結化物件。該常量在 Windows 95且 Internet Explorer 4 和活動案頭沒有安裝時無效。
$FONTS
系統字型目錄。
$TEMPLATES
文件範本目錄。這個常量的內容(所有使用者或目前使用者)取決於 SetShellVarContext設定。預設為目前使用者。
$APPDATA
應用程式資料目錄。目前使用者路徑的檢測需要 Internet Explorer 4及以上。所有使用者路徑的檢測需要 Internet Explorer 5 及以上。這個常量的內容(所有使用者或目前使用者)取決於 SetShellVarContext設定。預設為目前使用者。該常量在 Windows 95 且 Internet Explorer 4和活動案頭沒有安裝時無效。
$LOCALAPPDATA
本機應用程式資料目錄。該常量僅在 Windows 2000或以上系統有效。.
$PRINTHOOD
該目錄包含了可能存在於印表機檔案夾的連結化物件。該常量在 Windows 95和 Windows 98 上無效。
$INTERNET_CACHE
Internet Explorer的臨時檔案目錄。該常量在 Windows 95 和 Windows NT且 Internet Explorer 4 和活動案頭沒有安裝時無效。
$COOKIES
Internet Explorer的 Cookies 目錄。該常量在 Windows 95和 Windows NT 且 Internet Explorer 4和活動案頭沒有安裝時無效。
$HISTORY
Internet Explorer的記錄目錄。該常量在 Windows 95 和 Windows NT且 Internet Explorer 4 和活動案頭沒有安裝時無效。
$PROFILE
使用者的個人配置目錄。一個典型的路徑如 C:\Documents and Settings\Foo。該常量在 Windows 2000及以上有效。
$ADMINTOOLS
一個儲存管理工具的目錄。這個常量的內容(所有使用者或目前使用者)取決於 SetShellVarContext設定。預設為目前使用者。該常量在 Windows 2000、ME及以上有效。
$RESOURCES
該資來源目錄儲存了主題和其他 Windows資源(通常為 C:\Windows\Resources但在運行時會檢測)。該常量在 Windows XP及以上有效。
$RESOURCES_LOCALIZED
該本地的資來源目錄儲存了主題和其他 Windows資源(通常為 C:\Windows\Resources\1033但在運行時會檢測)。該常量在 Windows XP及以上有效。
$CDBURN_AREA
一個在燒錄 CD 時儲存檔案的目錄。該常量在 Windows XP 及以上有效。
$HWNDPARENT
父視窗的十進位視窗控制代碼。
$PLUGINSDIR
該路徑是一個臨時目錄,當第一次使用一個外掛程式或一個調用 InitPluginsDir時被建立。該檔案夾當安裝程式退出時會被自動刪除。這個檔案夾的用意是用來儲存給 InstallOptions使用的 INI 檔案、啟動畫面位元影像或其他外掛程式運行需要的檔案。
字串裡使用的常量
$$
轉義,用來表示 $。
$\r
用來表示一個斷行符號(\r)。
$\n
用來表示新的一行(\n)。
$\t
用來表示一個 Tab(\t)。 !insertmacro、Name、OutFile、InstallDir、InstallDirRegKey、ShowInstDetails、ShowUnInstDetails、BrandingText
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "協議許可.rtf"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN "$INSTDIR\Bin\GenPat.exe"
!insertmacro MUI_PAGE_FINISH
; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "SimpChinese"
; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
;OutFile "Setup.exe"
;OutFile "${PRODUCT_NAME}.exe"
OutFile "自訂.exe"
InstallDir "$PROGRAMFILES\signjing安裝樣本"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
BrandingText " signjing部落格 http://blog.csdn.net/signjing" !insertmacro
宏名稱 [參數] [...]
插入一個由 !macro 建立的宏的內容。如果建立的宏帶有參數,那麼你必須按宏的需求向它傳送足夠的參數。
!macro Print text
DetailPrint "${text}"
!macroend
!insertmacro Print "some text"
!insertmacro Print "some more text" name
名稱 [雙與名稱]
設定安裝程式的名稱。名稱通常用來顯示產品的名稱比如“我的程式””。如果在名稱裡有一個或多個與符號(&),把第二個參數設為與第一個相同,有 &的地方使用兩個 & 來表示。例如你的產品名稱為“foo & bar2000”,那麼使用:
Name "foo & bar2000" "foo && bar2000"
如果你的安裝程式名稱裡有 & 符號並且對名稱使用了一個 LangString,那麼你還需要建立另一個含有雙 &字元的名稱作為第二個參數。
接受變數。如果使用了變數,使用的變數必須在 .onInit被初始化。 outfile
[路徑\]安裝程式.exe
指定 MakeNSIS 要寫入安裝程式的輸出檔案。僅僅是 MakeNSIS 要寫入的檔案,它不會對安裝程式的內容有任何影響。 installdir
預設安裝目錄設定預設的安裝目錄。查看變數一節得到可用於該字串的變數(尤其是 $PROGRAMFILES)。注意該字串中最後一個 \後面的部分會被保留,當使用者在安裝時選擇“瀏覽”並取得新的目錄字串時,該部分會自動附加在後面(要禁止該行為你需要在目錄字串後面添加一個額外的 \,但是你要使用引號把目錄字串括起來以避免被認為是斷行處理)。如果沒有起作用的話,還是使用瀏覽按鈕吧。 installdirregkey
根鍵子鍵鍵名該屬性讓安裝程式去檢測一註冊表裡的一個字串,如果該字串可用那麼把它用來作為安裝目錄。如果預置了該屬性,當指定的註冊表鍵可用時它會越過 InstallDir指定的字串,否則使用預設的