nsis安裝包(七)_樣本指令碼文法解析

來源:互聯網
上載者:User

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指定的字串,否則使用預設的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.