1. 程式人生 > >nsis安裝包_示例指令碼語法解析

nsis安裝包_示例指令碼語法解析

轉自:http://www.cnblogs.com/yplong/p/3700817.html

以下是程式碼及解析,其中有底色的部分為指令碼內容。

註釋、!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\nsignjing安裝示例嚮導"

!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 XPME及以上才有效。

$PICTURES

使用者的圖片目錄。這個常量的內容(所有使用者或當前使用者)取決於 SetShellVarContext設定。預設為當前使用者。該常量僅在 Windows 2000XPME及以上才有效。

$VIDEOS

使用者的視訊檔案目錄。這個常量的內容(所有使用者或當前使用者)取決於 SetShellVarContext設定。預設為當前使用者。該常量僅在 Windows XPME及以上才有效。

$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 2000ME及以上有效。

$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)

!insertmacroNameOutFileInstallDirInstallDirRegKeyShowInstDetailsShowUnInstDetailsBrandingText

; 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指定的字串,否則使用預設的 InstallDir 指定值。查詢登錄檔時,該命令將自動截去引號( "C:\program files\poop" "%1",可得到 C:\program files\poop )。如果該字串以 .exe結尾,它還會自動移去字串裡的檔名部分( C:\program files\poop\poop.exe,將得到 C:\program files\poop )。對於更多高階的安裝目錄配置,可在 .onInit函式裡設定 $INSTDIR[譯者注:事實上它還可以自動擷取如 "C:\program files\poop\poop.exe" "%1"而得到 C:\program files\poop ,這樣你只要知道了某個程式關聯的檔案型別,就可以直接用它獲得該程式的安裝目錄。比如InstallDirRegKey HKCR "FlashGet.Document\shell\open\command" "" 即可獲得網際快車的安裝目錄]

showinstdetails

相關推薦

nsis安裝_示例指令碼語法解析

轉自:http://www.cnblogs.com/yplong/p/3700817.html 以下是程式碼及解析,其中有底色的部分為指令碼內容。 註釋、!define、變數、!include、常量 ; Script generated by t

nsis安裝_手把手教NIS Edit安裝嚮導的使用

轉自:http://blog.csdn.net/signjing/article/details/7855855 示例指令碼解析:http://blog.csdn.net/signjing/article/details/7944160 參考來自:http://blog.c

用inno Setup做應用程式安裝示例指令碼(.iss檔案)

{程式安裝前判斷主程式是否在執行} function InitializeSetup(): Boolean; var   ResultCode: Integer; begin   if RegGetSubkeyNames(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windo

nsis安裝(五)_手把手教NIS Edit安裝嚮導的使用

手把手教NIS Edit安裝嚮導的使用 需求的軟體環境: 1 安裝完上述兩款軟體後啟動HM NIS Edit,如圖: 2 點選“檔案”-“新建指令碼:嚮導”,如圖: 3 彈出嚮導歡迎介面,點

NSIS安裝腳本

lld 安裝完成 page nic dial publisher urn pos tran !addincludedir "include" Var MSG ;MSG變量必須定義,而且在最前面,否則WndProc::onCallback不工作,

減小NSIS安裝體積的方法

在NSIS指令碼的開頭加入 SetCompressor /SOLID LZMA 可以使得安裝包的體積縮小,通常能縮小20%左右。 這句指令碼的含義是使用固實壓縮,對於多個檔案的壓縮能夠縮小壓縮後的

NSIS 安裝確保只能有一個安裝例項執行

1、安裝程式只允許有一個執行 Function .onInit InitPluginsDir call hasinited ;建立互斥防止重複執行 System::Call 'kerne

NSIS 安裝多語言支援

製作安裝時通常都會被要求支援多語言。NSIS對於多語言的支援非常的方便。接下來介紹下如何為NSIS安裝包新增多語言支援。 1.首先在Nsi檔案中新增需要支援的語言的巨集 !insertmacro MUI_LANGUAGE "English" !insertmacro MUI

Visual Studio 2017各版本安裝離線下載、安裝解析

pla 離線文件 win10 unit splay and 文件下載 python擴展 erl 轉自 寂靜·櫻花雨 Visual Studio 2017各版本安裝包離線下載、安裝全解析 感謝IT之家網友 寂靜·櫻花雨 的投稿 關於Visual

npm i 安裝依賴提示字符串解析異常(Unexpected end of JSON input)

npm nodejs json解析異常 請確保網絡較好,個人因為網絡原因折騰了好久,資源庫可以設置為https://registry.npm.taobao.org/ 設置和查看命令如下:npm config set registry="https://registry.npm.taoba

【SU外掛情報局】 Enscape for SketchUp 基礎入門完全解析(附Enscape2.3.3安裝

作者 | 活力網-Andrew 同學們大家好! 活力網SU外掛情報局正式開播啦!!! 我們第一期要講的外掛是——一款重量級的實時渲染外掛 那它是一款什麼樣的外掛吶? 他是一款實時渲染的SU外掛 與它類似的軟體有: Lumion Twinmotion Mars 相比 L T

支付寶 App 構建優化解析:通過安裝重排布優化 Android 端啟動效能

1. 前言 本章節我們將圍繞《支付寶 App 構建優化解析》另啟新系列,細分拆解客戶端在“程式碼管理”、“證書管理”、“版本管理”、“構建打包”等維度的具體實現方案展開討論,帶領大家進一步瞭解支付寶在 App 構建模組下的持續優化。 本節將主要記錄通過對支付寶 Android Apk 檔案的重新佈局,來改

Kettle_js指令碼_示例

Kettle 版本7.0 一,String function 1 .date2str //js操作時間 var dValue = new Date(); //把時間變成字串 var dValue1 = date2str(dValue); //把時間變成當前格式字串 v

Ubiqua抓工具的安裝教程附帶ZigBee抓使用和入網流程解析

前言:   無線通訊這玩意是看不見摸不著的,比較炫幻,不像串列埠通訊,想知道通訊的資料,直接接一個USB轉串列埠線,開啟PC串列埠助手就可以看到資料了。 無線不同的地方就是,這玩意還有加密,即使知道金鑰,有的軟體也不能看到資料。這就奇葩了,這個軟體大家都懂得,是TI

華為手機 android8.0APP更新時出現安裝解析異常的提示及安裝閃退(無反應)問題

apk span nload sdk add ati lag 正常 activit 在做android app升級更新時遇到幾個問題,我用的測試機是華為V10 系統為8.0 一、安裝閃退(無反應) 解決辦法: 只要在Mainfest.xml 中加入權限編碼即可解決 &

使用Gradle編寫蒲公英自動上傳安裝和更新說明指令碼

Github: github.com/windinwork/… 平時測試中發包的時候,筆者在打完包就直接拖到蒲公英上讓它上傳就完事了。不過前兩天的會議上,測試小姐姐提出要在蒲公英上寫明這次的測試包修改了什麼內容。 筆者一想到上傳完包還要一個個打字說明在這個包我修改了什麼,立即強烈拒絕!但是測試小

Linux學習之軟體管理-指令碼安裝

指令碼安裝包安裝: 1、指令碼安裝包是什麼? 1)指令碼安裝包並不是獨立的軟體包型別,常見指令碼安裝方式安裝時使用的是原始碼包。 2)是人為把安裝的過程寫成了自動安裝的指令碼,只要執行指令碼,定義簡單的引數,就可以完成安裝 3)非常類似於Windows下軟體的安裝方式 &nb

輸入對應安裝版本號自動升級指令碼

指令碼大致如下 ###made by h### if [ -z "$readversion" ]; then echo --------------------------------- #顯示目錄下所有agent安裝包 echo "List file[該目

Mac 出現正在執行安裝指令碼或等待其他安裝完成的解決辦法

參考資料: https://www.jianshu.com/p/2d75ebf055c5 描述:安裝mysql時出現正在執行安裝包指令碼,等待半小時無果後切出工作管理員,結束安裝器程序,重新開啟安裝包,出現等待其他安裝完成。無法正常安裝。 原因:利用工作管理員殺掉了安裝器但安裝程序仍在進

Shell下製作自解壓安裝,實現指令碼的簡單加密

一、原理闡述 在 linux 下可以用幾個最基本的命令製作一個自解壓的程式。其原理是:利用 cat 命令可以將兩個檔案連起來(用>>追加也能達到同樣效果),前一個檔案是 shell 指令碼,負責執行解壓和安裝;後一個檔案是一個壓縮包。 把這兩個檔案通過 cat