NSIS安裝制作基礎(chǔ)教程[初級(jí)篇][轉(zhuǎn)]
Posted on 2007-12-22 11:04 Matthew Chen 閱讀(3012) 評(píng)論(2) 編輯 收藏 所屬分類: Softwares Configurations轉(zhuǎn)自:http://www.hanzify.org/teach/index.php?Go=Show::196-1108396800
NSIS簡(jiǎn)介:
NSIS 是“Nullsoft 腳本安裝系統(tǒng)”(Nullsoft Scriptable Installation System)的縮寫,它是一個(gè)免費(fèi)的 Win32 安裝、卸載系統(tǒng),它的特點(diǎn):腳本簡(jiǎn)潔高效;系統(tǒng)開銷小;當(dāng)然進(jìn)行安裝、卸載、設(shè)置系統(tǒng)設(shè)置、解壓文件等等更不在話下,幾乎可以做所有的事情。更多的功能請(qǐng)閱讀藍(lán)色網(wǎng)際的《NSIS幫助文檔》。
對(duì)于制作NSIS的使用教程,藍(lán)色網(wǎng)際是NSIS方面的專家,她的《NSIS幫助文檔》就是一本NSIS的圣經(jīng),而對(duì)初學(xué)者來說,最頭疼的莫過于一大堆看不懂的代碼,對(duì)他們來說無異于一本天書。緣于此,特草此基礎(chǔ)教程,希望NSIS專家們勿見笑,不當(dāng)之處歡迎批評(píng)指正以期完善,也希望給初學(xué)者作個(gè)鋪墊。
工具:
NIS Edit+Nullsoft Installation System(NSIS)
[此兩款軟件都可以到世紀(jì)主站上下載到]
思路:腳本向?qū)В薷拇a=個(gè)性化安裝包
步驟:
I.利用向?qū)е谱靼惭b包:
1.安裝上述兩款,啟動(dòng)NIS Edit,在“文件”菜單中“新建腳本:向?qū)?#8221;=>下一步”,如圖1:
附圖
2.設(shè)置應(yīng)用程序信息,如軟件名稱、版本、出版人等,如圖2。
當(dāng)然最一個(gè)網(wǎng)站可以留空,如果設(shè)置了,則安裝包會(huì)生成一個(gè)對(duì)應(yīng)網(wǎng)址的“Internet 快捷方式”。
附圖
3.設(shè)置程序選項(xiàng),如安裝包圖標(biāo)、安裝程序文件、安裝包語言[這里選“SimChinese”]、用戶圖形界面及壓縮方式等,
我們可以選用默認(rèn)值,也可以點(diǎn)擊對(duì)應(yīng)項(xiàng)目的按鈕或下拉菜單更改設(shè)置,如下圖3
附圖
4.設(shè)置安裝目錄及授權(quán)信息,如圖4后“下一步”:
附圖
5.選定程序文件,即我們要打包的文件,可以使用默認(rèn)的“Mainsection”,
也可以根據(jù)需要進(jìn)行更改或新建組別,
如果組比較多時(shí),
你也可以設(shè)置是否“允許用戶選擇要安裝的組件”,如圖5。
附圖
完畢后進(jìn)行“添加文件”操作,選定我們要打包的文件,如圖6,
完成自動(dòng)后返回的圖5的界面,執(zhí)行下一步操作。
附圖
6.設(shè)置開始菜單中文件夾名稱及快捷方式,這里我們使用默認(rèn)值,如圖7,按“下一步”:
附圖
7.指定安裝后要運(yùn)行的程序,同上用默認(rèn)值并設(shè)置相關(guān)運(yùn)行參數(shù)及描述,
如果你和我一樣懶的話,或不想在安裝運(yùn)行任何程序,則留空即可,如圖8:
附圖
8.這步是有關(guān)卸載程序的相關(guān)信息,如卸載時(shí)的提示、卸載的圖標(biāo)等,如圖9
附圖
9.至此完成向?qū)В鐖D10,,鉤選“保存腳本”、“轉(zhuǎn)換文件路徑到相關(guān)路徑”及“編譯腳本”
附圖
提示保存腳本路徑并自動(dòng)編譯腳本,我們可以按或F9運(yùn)行安裝程序進(jìn)行預(yù)覽,向?qū)Мa(chǎn)生的安裝包效果圖如圖11所示:
附圖
II.修改代碼以個(gè)性化安裝包:
10.選擇可修改之處:
1)軟件LOGO[如圖11A]、安裝包標(biāo)題[圖11B]、圖11C、圖12、圖13
圖11見上樓
圖12如下
附圖
圖13如下
附圖
11.修改代碼
1) 修改軟件LOGO:在源代碼“ MUI Settings”后面添加下列代碼:
|
注釋:引號(hào)內(nèi)為位圖的路徑,位圖大小大約為165*298
效果圖如圖14所示
附圖

|
注釋:\r\n為換行標(biāo)志
效果圖上樓如圖14所示
3)修改圖11C中的說明,同上位置添加下列代碼:
|
效果圖如圖14所示
|
后添加:
|
效果圖如圖15所示
附圖

|
后添加:
|
效果所示
附圖

A、普通效果
|
|
7)背景音樂[貫穿安裝過程]
|
后語:
以上僅是NSIS制作安裝包最基本的操作,供初學(xué)者入門之用,故云“初級(jí)篇”。
希望不會(huì)怡笑大方,更希望藍(lán)MM、陳敏毅老大等NSIS高手的中高級(jí)教程:)
相關(guān)資料下載[以Pdf2allV5.35d為例,可直接點(diǎn)擊下載]
全文的Word文檔附在附件中
NSIS.rar
制作了安裝包制作動(dòng)畫演示
[可直接點(diǎn)擊下載]
相關(guān)文件列表如下:
動(dòng)畫演示 [pdf2all-movie.exe]
安裝包的NSIS腳本代碼 [PDF2all-nsis.nsi.txt]
成品的安裝包 [pdf2all-setup.exe]
常見修改的代碼 [code.txt]
NSIS基礎(chǔ)教程CHM版 [NSIS安裝制作基礎(chǔ)教程(CHM格式)-特別感謝tracky]
感謝chenmy老大提供空間:)
偶的閃屏圖:
附圖

|
背景音樂(貫穿安裝全過程):
|
背景音樂2:
|
最后一種方法使用了 bgimage 插件,安裝程序執(zhí)行到該插件時(shí)會(huì)等待 wav 播放完再繼續(xù)執(zhí)行。
謝謝dujuan509兄
如果閃屏效果[漸隱]+背景音樂[全程]放在一起
那代碼該如何修改?
偶兩者無法兼得
望不吝賜教
raindy 藍(lán)色網(wǎng)際 藍(lán)色網(wǎng)際 推薦一個(gè) NSIS 的快速編輯器 - NotePad2。雖然不是 NSIS 專門編輯器不過有時(shí)候比 Venis 方便,因?yàn)?Venis 不支持文本塊操作,而且 Venis 對(duì)語法高亮做得不是很好。NotePad2 的語法高亮是根據(jù)后綴名來確定的,只要你打開 NSI 文件不用任何設(shè)置就會(huì)自動(dòng)語法高亮。 其實(shí) NotePad2 作為記事本替代者也非常不過,界面非常相似,而 NotePad2 功能強(qiáng)大了好多。 你可以在 http://foobar.nease.net/nsis/np2.exe 下載我修改的版本,主要補(bǔ)全了 NSIS 語法高亮,原版由于很久沒更新 NSIS 的語法高亮代碼,所以有一些新增的 NSIS 指令不能高亮顯示。 并作了一些優(yōu)化,做要是讓它更像記事本 貼個(gè)圖: 附圖 ![]() dujuan509
你指的是選擇安裝目錄頁面的提示文字吧? 只需在
前面添加一行:
raindy 有時(shí)間的話看看我這個(gè)漢化補(bǔ)丁的 NSIS 腳本,然后寫一篇教程,嘿嘿,寫東西你比較拿手
基本上包括了做補(bǔ)丁包含的大部分情況: 自動(dòng)查詢?cè)孳浖惭b目錄并包含目錄修正 原版軟件的備份和恢復(fù),以及漢化補(bǔ)丁的卸載 對(duì)原版進(jìn)行 MD5 校驗(yàn) 把漢化補(bǔ)丁應(yīng)用到原版軟件不同版本 注冊(cè)表的修正,主要是右鍵菜單 數(shù)據(jù)庫的漢化 讀取、修改、寫入注冊(cè)表二進(jìn)制類型數(shù)據(jù) NSIS 做補(bǔ)丁的優(yōu)點(diǎn)是生成文件比較小,而且還可以包含 N 個(gè)版本的補(bǔ)丁 附件 hb-acdsee7_pub[1].nsi.zip raindy
設(shè)置了自定義安裝圖標(biāo)就會(huì)自動(dòng)顯示的,不需要另外添加,自定義安裝圖標(biāo):
這一點(diǎn)和INNO不同,INNO中則需要在[setup]中設(shè)置:
其他需要個(gè)性化的地方,建議閱讀一下藍(lán)色網(wǎng)際翻譯的NSIS幫助文檔
zkdpower 請(qǐng)問各位如何改這些 第一個(gè)就是如何把插入的headerimage圖片放到右邊(默認(rèn)是在左邊) 第二個(gè)就是把headerimage上面的字改掉 謝謝 附圖 ![]() dujuan509
2、在 !insertmacro MUI_PAGE_LICENSE "c:\License.txt"前增加兩行:
zkdpower 請(qǐng)問藍(lán)色網(wǎng)際,在你的MUI 文檔中有
“MUI_HEADERIMAGE_RIGHT 令本應(yīng)顯示于左邊的頁眉圖像顯示于右面(當(dāng)使用 RTL 語言時(shí), 它將會(huì)顯示于左邊而不顯示于右邊).” 這么一段話,請(qǐng)問何為RTL語言呢,本人愚拙,望指點(diǎn) 藍(lán)色網(wǎng)際 restools venis function 向?qū)Чδ茉?NISEdit 上完整實(shí)現(xiàn),晚上或明天放出,不過需要人幫忙把向?qū)_本編寫完整,因?yàn)閷懗绦驎r(shí)只是拿了4個(gè)具代表性的 function 來作為測(cè)試,這是這次放出版本實(shí)現(xiàn)的功能。要知道 NSIS 的 funciton 有這么多啊。
|
顯示效果
2.彈出函數(shù)編輯窗口:
3.確定后,輸入,這里一提的是,輸入時(shí),會(huì)自動(dòng)根據(jù)上一行代碼的縮進(jìn),自動(dòng)在輸入的函數(shù)行前面添加前導(dǎo)空格,以減少自己再輸入前面的空格。
==================
ISS2NSI v1.0a2
==================
ISS2NSI is a tool for convert Inno Setup script files into NSIS script files.
Usage:
==================
Program:
At the command prompt write: iss2nsi issscript.iss [nsiscript.nsi]
if nsiscript.nsi is no specified then the converted script will be
saved with the same name of the issscript.iss but with extension .nsi.
NIS Edit Plugin:
1- Close HM NIS Edit.
2- Put hmne_iss2nsi.dll in the plugins directory
(Default $PROGRAMFILES\HMSoft\NIS Edit\Plugins)
3- Start HM NIS Edit.
4- You will found a new item in the tools menu called "Convert InnoSetup script".
NOTE: Before compile the converted script please check it, because
complete compatibility is NOT available. I design this tool to convert my
Inno Setup scripts and is not tested with more complex scripts.
The source code is included if you want to contribute to the project
for make the converted script 100% compatible with the original.
Please send my your modifications to ranametal@blistering.net
Note that this project is a modification to the Inno Setup 3.0.6
compiler and modifications to the Inno Setup source files are under
the Inno Setup license (see: src\is-src\is-license.txt).
Note: the files in the src\is-src directory are unmodified Inno Setup
source files needed by the Compile.pas unit located in the src directory
---------------------------------------------------------
hmne_iss2nsi.dll 把這個(gè)文件放到 NISEdit 目錄下的 Plugins 中就可以使用,沒有詳細(xì)測(cè)試,不過如果是針對(duì)版本的話, Inno Setup 3.0.6 ,估計(jì)應(yīng)該沒問題吧。
ISS2NSI.rar
雖然版本太低,用來從 ISS 的腳本轉(zhuǎn)向?qū)W習(xí) NSIS 應(yīng)該容易點(diǎn)吧。
ISS2NSI 源碼下載。
沒時(shí)間去看看它,只是把它編譯成了一個(gè)DLL。有時(shí)間看看它是什么原理。
NISEdit 的增強(qiáng)版本,希望有人來幫幫忙,增加一下函數(shù),否則這個(gè)版本也強(qiáng)不到哪里去。
把里面的那些文件放入 NISEdit 的目錄中,為了區(qū)分原版,程序改名為 VNISEdit。
兩個(gè)版本可以同時(shí)存在,不過你要把 VNISEdit 設(shè)為默認(rèn)編輯器,才可以默認(rèn)用它來打開。
修正:
1.添加一種菜單的皮膚。
2.增加 NSIS 函數(shù)向?qū)Чδ堋#愃?Venis 中的 function 功能)
4.改程序調(diào)用幫助時(shí),不要把幫助窗口置頂,因?yàn)橹庙敃?huì)令到查看幫助時(shí)不能切換會(huì)編輯器窗口。
最新功能(區(qū)段結(jié)構(gòu)分析)
左圖是VNISEdit解釋的,右圖是Venis分析的。分析對(duì)象(makensis.nsi)
全景圖:試一下唄,分析速度比 Venis 好很多的。基本上感覺不到視圖的閃動(dòng)。線程實(shí)時(shí)分析,只要改動(dòng)代碼,視圖會(huì)立刻作出反應(yīng)。
請(qǐng)問下面那些問題怎樣做的,
1、怎樣控制自定義面的“下一步”按鈕的可用與不可用
2、怎樣為自定義頁面上的組件添加Change事件呢
3、我在這個(gè)網(wǎng)站里下載的foobar漢化增強(qiáng)版的安裝文件里看到頁面“MUI_PAGE_COMPONENTS”是怎么做到的,就是怎么把那個(gè)頁面的左邊改為能顯示描述內(nèi)容和隱蔽一些文本
colonel
藍(lán)色網(wǎng)際
對(duì)于控制下一步按鈕來說,有三個(gè)階段分別是:頁面初始化之前、頁面初始化時(shí)、頁面要關(guān)閉時(shí)。不同的階段對(duì)應(yīng)的插入函數(shù)不同。
比如要在頁面初始化之前禁止下一步按鈕,MUI 界面可以這樣
以下是代碼片段: !define MUI_PAGE_CUSTOMFUNCTION_PRE ComponentPre !insertmacro MUI_PAGE_COMPONENTS Function ComponentPre GetDlgItem $0 $HWNDPARENT 1 EnableWindow $0 0 FunctionEnd |
那“2、怎樣為自定義頁面上的組件添加Change事件呢”,我自定義了一個(gè)配置頁面,我想用戶在完成配置才可激活“下一步”按鈕,這個(gè)怎么做的呢
藍(lán)色網(wǎng)際
需要給控件加上 NOTIFY 的標(biāo)記。
例子在我的簽名里有。
需要先了解 GetDlgItem 和 EnableWindow 指令的作用。
colonel
這個(gè)問題呢
3、我在這個(gè)網(wǎng)站里下載的foobar漢化增強(qiáng)版的安裝文件里看到頁面“MUI_PAGE_COMPONENTS”是怎么做到的,就是怎么把那個(gè)頁面的左邊改為能顯示描述內(nèi)容和隱蔽一些文本
怎樣使“MUI_PAGE_COMPONENTS”中的樹目錄只能在點(diǎn)選復(fù)選框才被選中呢
藍(lán)色網(wǎng)際
這個(gè)用 Resource Hacker 調(diào)整一下控件就行了。默認(rèn)的 UI 文件是 NSIS\Contrib\UIs\modern.exe
到我的簽名里下一個(gè)特別版的 makensis.exe。
colonel
我不想在組件選擇頁面中用 onMouseOverSection 來顯示 描述 ,如果架設(shè)函數(shù)可以增加的話,我就想到這個(gè) “回調(diào) onMouseDownSection ”
我是想通過組件目錄里的 OnChange 事件來顯示
我不懂VC++吖,如果我會(huì)的話就可以像MM你那樣去改它的代碼了
藍(lán)色網(wǎng)際
特別版的就是這樣啊,當(dāng)你點(diǎn)擊組件的時(shí)候描述區(qū)域才會(huì)顯示或改變。
普通版的只要鼠標(biāo)移上去就顯示了。你沒試過嗎。
colonel
哦~~~~~~~試到了,原來你是改了onMouseOverSection 回調(diào),對(duì)啦,MM你有沒有做過 組件的OnChange 事件嗎?主要是用在自定義頁面上的
是用這個(gè)嗎?Call shell32.dll::SHChangeNotify
藍(lán)色網(wǎng)際
不知道你說的“組件的 OnChange 事件”是什么意思。
是不是當(dāng)組件選擇更改的時(shí)候調(diào)用的函數(shù)呢?如果是的話那直接使用 Function .onSelChange 就行了。
wq99
各位好:我是新手,
我在看function時(shí),沒發(fā)現(xiàn)參數(shù)的傳入。
可能我的思維方式不對(duì)。
function Fname
functionend
參數(shù)應(yīng)該怎么傳呢?
藍(lán)色網(wǎng)際
NSIS 的函數(shù)其實(shí)是個(gè)假函數(shù),并不能像 C++ 那樣傳遞參數(shù),如果你需要傳遞參數(shù)請(qǐng)使用堆棧。
一個(gè)典型的例子請(qǐng)看附錄的 Get parent directory。
那如果一個(gè)Edit里的內(nèi)容發(fā)生變化,另一個(gè)組件也跟關(guān)變化,這個(gè)Edit 的Change事件去寫呢
PS:可能我習(xí)慣于使用delphi所以有時(shí)說到的組件事件名稱與你不一樣吧
colonel
那如果一個(gè)Edit里的內(nèi)容發(fā)生變化,另一個(gè)組件也跟關(guān)變化,這個(gè)Edit 的Change事件去寫呢
PS:可能我習(xí)慣于使用delphi所以有時(shí)說到的組件事件名稱與你不一樣吧
藍(lán)色網(wǎng)際
你可以參考一下 NSIS\Contrib\InstallOptions\testnotify.nsi
wq99
File "${LOCATION}\$R0"
$R0是一個(gè)文件,結(jié)果
說沒有這個(gè)文件,
File "${LOCATION}\123.exe"
那就可以了。
奇怪,我第一句寫錯(cuò)了么?
File "${LOCATION}\${R0}"這樣也不對(duì)。
藍(lán)色網(wǎng)際
你可以先在資源管理器里看看是否有 $R0 這個(gè)文件。一般來說很少有這種不帶擴(kuò)展名的奇怪文件,況且不帶擴(kuò)展名的話很容易被當(dāng)作目錄來處理。
一般來說編譯器的報(bào)告是正確的,這里有一個(gè)測(cè)試腳本,你可以試試看。
test.zip
wq99
啊~對(duì)不起啊,我沒說仔細(xì)。
$R0是變量,是從堆棧里Pop出來的。
即123.exe.
File "${LOCATION}\$R0"
即File "${LOCATION}\123.exe"
以下是代碼片段: Push "123.exe" …… Function InstallOne Pop $R0 DetailPrint $R0 SetOutPath "$INSTDIR" File "${LOCATION}\$R0" ExecWait ’"$INSTDIR\$R0"’ FunctionEnd |
DetailPrint $R0
是可以打印出 123.exe
改成File "${LOCATION}\123.exe"是可以的。
怎么用$R0就不行了呢?
藍(lán)色網(wǎng)際
File 指令后面的文件必須是編譯時(shí)當(dāng)前系統(tǒng)存在的文件,而 $R0 要在編譯后才有值當(dāng)然會(huì)出錯(cuò)。變量是運(yùn)行時(shí)才有效的。
如果你想改名的話請(qǐng)使用 File "/oname=目標(biāo)文件" "本地文件"
oname= 后面的目標(biāo)文件可以用變量。
arthur810
為什么我的“安裝程序語言”里面是空的
如圖,請(qǐng)指教,謝謝
注:WinXP SP2簡(jiǎn)體中文系統(tǒng)

zhp0083
手動(dòng)指定一次就會(huì)有了
以下是代碼片段: !insertmacro MUI_LANGUAGE "SimpChinese" |
sjhome
請(qǐng)問NSIS只能添加一個(gè)目錄下的文件,怎么樣能添加所以目錄下的文件呢?怎么設(shè)置呢?多謝!
如圖所示.
只能添加"Counter-Strike Source"目錄下的文件,怎么樣能添加"Counter-Strike Source下的bin文件,config文件及所以文件夾"呢?
藍(lán)色網(wǎng)際
File 可以使用 /r 或 /x 。