NSIS
軟件語言:簡體中文
|
軟件授權(quán):免費(fèi)軟件
|
適用系統(tǒng):Windows
|
創(chuàng)建時(shí)間:2020-12-14 |
軟件廠商/開發(fā)者信息:獨(dú)立開發(fā)者
|
錦囊 更多
- NSIS的教程 2021-03-30
- 提升Git體驗(yàn):探索Gitui——高效的終端UI工具 2024-01-05
- Stirling PDF - 強(qiáng)大的本地 PDF 管理工具 2024-01-05
資訊 更多
- NSIS v3.04 官方版更新 2019-02-21
- 微信Mac插件——微信小助手,是一款功能強(qiáng)大的插件 2024-01-08
- 完美解碼:打造頂級(jí)視聽盛宴的終極使用指南 2024-01-06
簡介
NSIS(Nullsoft Scriptable Install System)是一個(gè)專業(yè)開源的制作windows安裝程序的工具。
特點(diǎn)
1、開銷小,一個(gè)完整功能的安裝程序僅需要34k的額外開銷。
2、支持大多數(shù)Windows平臺(tái),包括:Windows9.x,WindowsNT,Windows2000,WindowsXP,Windows2003
3、支持三大壓縮算法:ZLib,BZip2,LZMA
4、支持腳本
5、支持多語言
6、支持安裝界面定制
7、提供可擴(kuò)展的插件接口
8、支持網(wǎng)絡(luò)安裝、補(bǔ)丁
9、支持無人值守的安裝模式
10、此外,NSIS的license允許任何用途免費(fèi)使用。
腳本結(jié)構(gòu)
(下稱nsi腳本)主要包含安裝程序?qū)傩?、頁面、區(qū)段、函數(shù)。
屬性用來定義安裝程序的行為和界面風(fēng)格,這些屬性大部分是編譯時(shí)刻屬性,即不能在運(yùn)行時(shí)刻改變。
頁面是指安裝程序的向?qū)ы撁妗?/p>
示例:
Page license
Page components
Page directory
Page instfiles
Uninst Pageuninst Confirm
Uninst Pageinstfiles
區(qū)段是對應(yīng)某種安裝/卸載選項(xiàng)的處理邏輯,該段代碼僅當(dāng)用戶選擇相應(yīng)的選項(xiàng)才被執(zhí)行。
卸載程序的區(qū)段名用"un."作為前綴。
示例:
Section"Installer Section"
Section End
Section"un.Uninstaller Section"
Section End
在區(qū)段中可以使用很多指令用來完成諸如解壓縮文件、讀寫注冊表、創(chuàng)建目錄、創(chuàng)建快捷方式等任務(wù)。
但最常用的指令是Set Out Path和File。前者用于指定目的位置,后者用于指定文件。
示例:
Section"My Program"
Set Out Path$INSTDIR
File"My Program.exe"
File"Readme.txt"
Section End
區(qū)段名的修飾符“/o”表示該區(qū)段默認(rèn)不選上,“-”表示隱藏區(qū)段(匿名區(qū)段也是隱藏區(qū)段),“!”表
示需要粗體顯示的區(qū)段。
Section In表示該區(qū)段和安裝類型之間的關(guān)系:Section In insttype_index[RO]
RO修飾符表示不可修改。
子區(qū)段用于包含多個(gè)區(qū)段:
Sub Section[/e]Caption[subsection_name in dex output]
修飾符“/e”用于該子區(qū)段的所有區(qū)段是否默認(rèn)展開。
函數(shù)包含了模塊化的安裝邏輯,在nsi腳本中函數(shù)分為兩種:用戶自定義函數(shù)和回調(diào)函數(shù)。
用戶自定義函數(shù)僅當(dāng)是Call指令調(diào)用時(shí)才被執(zhí)行。
如果函數(shù)體中沒有abort語句,則安裝程序執(zhí)行完了用戶自定義函數(shù),繼續(xù)運(yùn)行Call語句和指令。
用戶自定義函數(shù)的語法如下:
Function<函數(shù)名>
#some commands
Function End
函數(shù)的調(diào)用則使用以下語法:
Call<函數(shù)名>
可見無論是函數(shù)的定義還是函數(shù)的調(diào)用都沒有參數(shù)傳遞。
通常nsi的參數(shù)傳遞是通過堆棧操作Pop,Push和20個(gè)寄存器變量$0~$9、$R0~$R9進(jìn)行的。
也可以通過全局變量完成參數(shù)傳遞。
如:
Varinput;
Varoutput;
Sectionbla
DeteailPrint"inputis$input$\n"
Call square
Deteail Print"square of$inputis$output$\n"
Section End
Function square
output=input^2
Function End
回調(diào)函數(shù)則是由在特定的時(shí)間點(diǎn)觸發(fā)的程序段。常用的回調(diào)函數(shù)如.onInit:
Function.onInit
Message Box MB_YESNO"This will install My Program.Do you wish to continue?"IDYESgogogo
Abort
gogogo:
Function End
NSIS對于安裝邏輯定義以下回調(diào)函數(shù):
.onGUIInit
.onInit
.onInst Failed
.onInst Success
.onGUI End
.on Mouse Over Section
.on Reboot Failed
.on Sel Change
.on User Abort
.on Verify InstDir
NSIS對于卸載邏輯定義以下回調(diào)函數(shù):
un.onGUIInit
un.onInit
un.on Uninst Failed
un.on Uninst Success
un.on GUI End
un.onReboot Failed
un.on User Abort
版本
v2.452012.10.01
1、集成了網(wǎng)絡(luò)上能夠收集到的所有插件及應(yīng)用示例;
2、集成了VNISEditv2.03簡體中文版和Note Pad2v3.1簡體中文版兩個(gè)腳本編輯器,并能方便地切換;
3、集成了NSIS文件夾壓縮器、ResourceHacker、Zip2Exe、Ini2Nsi等實(shí)用工具;
4、附帶了NSIS用戶手冊和NSIS圖文教程集錦。
安裝
1、確定安裝的功能和界面元素
2、編寫NSIS腳本
3、使用NSIS提供的makensis或者makensisw程序,將步驟2編寫的腳本編譯成可執(zhí)行的安裝程序
4、調(diào)試安裝程序,如果有問題退到第二步重復(fù)
5、隨著NSIS的流行,有一些第三方的NSIS腳本開發(fā)環(huán)境出現(xiàn)了,如HMNISEdit,VenisIX。
前者是完全開源的,后者僅對個(gè)人和非商業(yè)用途免費(fèi)。在這些集成開發(fā)環(huán)境下,步驟2,3可以方便的組合在一起。
指令
nsi腳本的編譯器指令主要指僅在編譯時(shí)刻執(zhí)行的命令。
這些命令主要用來包含文件、條件化編譯、定義常量、定義宏等。
定義常量和宏是編譯器指令最主要應(yīng)用。
定義常量的示例:
!defineVERSION"1.0.3"
Name"My Program$"
OutFile"My Program Installer-$.exe"
定義宏的示例:
!macro My FuncUN
Function$My Func
Call$DoReg Stuff
Read Reg StrHKLMSoftware\My Programkey
Detai lPrint
Function End
語法解說
注釋
單行注釋用井號(hào)“#”或分號(hào)“;”,跨行注釋用可以用“C/C++”中注釋語法。
9.2數(shù)據(jù)類型
數(shù)字
數(shù)字常量可以用十進(jìn)制、十六進(jìn)制(0x為前綴)、八進(jìn)制(0為前綴)表示。
顏色用類似HTML的中RGB表示法,但去井號(hào)“#”。
字符串
字符串常量可以用引號(hào)引用,轉(zhuǎn)意字符用"$\"作前綴。
美元符號(hào)、常用轉(zhuǎn)意字符換行、回車、制表符的nsi語法表示分別為:$$,$\n,$\r,$\t
續(xù)行符
nsi腳本用行尾的反斜杠“\”表示下一行和當(dāng)前行邏輯上是同一行。
默認(rèn)文件
如果在makensis同目錄下有nsisconf.nsh文件,該文件會(huì)被自動(dòng)包含,除非編譯時(shí)指定/NOCONFIG選項(xiàng)。
標(biāo)號(hào)
nsi使用GOTO語句和IfErrors、Message Box、If Fil eExists及StrCmp進(jìn)行程序控制流表示,標(biāo)號(hào)是這些語句的目標(biāo)語句。
標(biāo)號(hào)定義的語法:標(biāo)號(hào):語句
標(biāo)號(hào)必須定義在函數(shù)和區(qū)段中,其作用范圍僅限于定義它的區(qū)段或函數(shù)。以點(diǎn)號(hào)“.”開頭的標(biāo)號(hào)是全局標(biāo)號(hào)。
相對跳轉(zhuǎn)
nsi 腳本常常使用相對跳轉(zhuǎn)表示條件分枝,其語法是 [+-][1-9],加號(hào)表示從當(dāng)前位置往前跳轉(zhuǎn),減號(hào)則表示從當(dāng)前位置往后跳轉(zhuǎn)。
數(shù)字表示跳轉(zhuǎn)的語句條數(shù)。
示例:
Goto+4
Message BoxMB_OK"The following message will be skipped"
Goto+3
Message BoxMB_OK"You will never ever see this message box"
Goto-3
Message BoxMB_OK"Done"
變量定義
nsi腳本的變量定義用Var關(guān)鍵字,后跟變量名,變量是全局的并且是大小寫不敏感的。變量引用時(shí)需要加上前綴“$”。
除了用戶自定義的變量外,nsi腳本中與定義寄存器變量$0~$9、$R0~$R9用于參數(shù)傳遞,以及系統(tǒng)變量用于特定用途。
這些變量主要有:
$INSTDIR,$OUTDIR,$CMDLINE,$LANGUAGE這些變量都是可寫的。
$PROGRAMFILES,$COMMONFILES,$DESKTOP,$EXEDIR,$WINDIR,$SYSDIR,$TEMP,$STARTMENU
$SMPROGRAMS,$SMSTARTUP,$QUICKLAUNCH,$DOCUMENTS,$SENDTO,$RECENT,$FAVORITES
$MUSIC,$PICTURES,$VIDEOS,$NETHOOD,$FONTS,$TEMPLATES,$APPDATA,$PRINTHOOD
$INTERNET_CACHE,$COOKIES,$HISTORY,$PROFILE,$ADMINTOOLS,$RESOURCES
$RESOURCES_LOCALIZED,$CDBURN_AREA,$HWNDPARENT,$PLUGINSDIR。
nsi腳本中可用于調(diào)試的系統(tǒng)函數(shù)有MessageBoxes、DetailPrint、Dumpstate。
ModernUI
ModernUI是感觀上模仿最新的Windows系統(tǒng)的界面風(fēng)格,它由歡迎頁面、結(jié)束頁面和其他向?qū)ы撁鏄?gòu)成。
頁面
向?qū)ы撁媸荖SIS安裝程序中最重要的界面元素,在nsi腳本中可以使用NSIS內(nèi)置頁面或者定制界面,通過腳本可以指定頁面的順序、顯示樣子和行為。Page指令用來定義安裝程序中的頁面,UninstPage用來定義,此外PageEx指令提供類是功能,但提供更多選項(xiàng)。頁面的順序和它在nsi腳本中出現(xiàn)的次序一致。
示例:
Page license
Page components
Page directory
Page instfiles
Uninst Pageuninst Confirm
Uninst Pageinstfiles
規(guī)定安裝程序首先顯示license頁面,然后顯示components選擇頁面,接著顯示安裝目錄選擇頁面。10.1頁面選項(xiàng)
不同的頁面有不同的選項(xiàng):
Licensepage有LicenseText、License Data、License Force Selection;
Components selection頁面有Component Text;
Directory selection頁面有DirText、DirVar(僅能在PageEx中使用)、DirVerify;
Un/Installation log頁面有Details ButtonText、Completed Text;
Uninstall confirmation頁面有DirVar(僅能在PageEx中使用)、UninstallText。
對于內(nèi)置的Page,NSIS支持三個(gè)回調(diào)函數(shù)用于定制界面和驗(yàn)證,對于自定義頁面NSIS支持兩個(gè)回調(diào)函數(shù)。
Page指令語法:
Page license|components|directory|instfiles|uninst Confirm)[pre_function][show_function][leave_function]
或者:
Page custom[creator_function][leave_function][caption]
示例:
Page license skip License""stayInLicense
Page customcus tomPage""":custompage"
Page instfiles
Function skip License
MessageBoxMB_YESNO"Do you want to skip the license page?"IDNOno
Abort
no:
Function End
Function stay In License
MessageBoxMB_YESNO"Do you want to stay in the license page?"IDNOno
Abort
no:
Function End
Function custom Page
Get Temp File Name$R0
File/oname=$R0custom Page.ini
Install Options::dialog$R0
Pop$R1
StrCmp$R1"cancel"done
StrCmp$R1"back"done
StrCmp$R1"success"done
error:Message BoxMB_OK|MB_ICONSTOP"Install Optionserror:$\r$\n$R1"
done:
Function End
Uninst Page指令語法
Uninst Pagecustom[creator_function][leave_function][caption]
或
UninstPage(license|components|directory|instfiles|uninstConfirm)[pre_function][show_function][leave_function]
Page Ex語法
Page Ex使用嵌套結(jié)構(gòu),比如:
Page Exlicense
License Text "Readme"
License Data readme.rtf
Page Callback slicense Prelicense Show licenseLeave
Page ExEnd
常用指令
nsi大致可以分為基本指令、注冊表及ini操作指令、通用指令、流程控制指令、文件操作指令、卸載指令、字符串處理指令、多語言支持指令、重啟指令。
以下是常用的基本指令:
(1)Delete
Delete[/REBOOTOK]file
(2)Exec
Execcommand
(3)ExecShell
Exec Shellaction command[parameters][SW_SHOWNORMAL|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_HIDE]ExecShell"open"
Exec Wait
Exec Waitcommand
示例:
ExecWait'"$INSTDIR\someprogram.exe"'
Detail Print"some program returned"
(4)File
File[/nonfatal][/a]([/r][/xfile|wildcard[...]](file|wildcard)[...]|/oname=file.datinfile.dat)
/r選項(xiàng)用作遞歸模式,/x用于排出文件
示例:
Filesomething.exe
File/asomething.exe
File*.exe
File/r*.dat
File/rdata
File/oname=$TEMP\temp.datsomefile.ext
File/nonfatal"a file that might not exist"
File/r/xCVSmyproject
File/r/x*.res/x*.obj/x*.pchsource
(5)Rename
Rename[/REBOOTOK]source_filedest_file
(6)RMDir
RMDir[/r][/REBOOTOK]directory_name
解決方法
首先你先將你的一鍵還原,也就是備份系統(tǒng)刪除,這個(gè)可以準(zhǔn)確的說!已經(jīng)沒用了,若是沒有的也算了
然后你肯定有重裝系統(tǒng)盤吧,在重裝盤進(jìn)入安全系統(tǒng)進(jìn)行格式化C盤。
格式化后重啟,再用你重裝盤工具將硬盤分為四個(gè)分區(qū),這樣重裝下系統(tǒng)就可以成功了!這是個(gè)最簡單的方法,也是最可靠的,分區(qū)后就意味著你電腦所有東西都沒了。
插件
nsi支持插件,通過插件可以方便的擴(kuò)展NSIS安裝程序的功能。
NSIS插件是用C++、Delphi等語言編寫的dll,在nsi腳本中調(diào)用nsi中的函數(shù)使用如下語法:
DLLName::FunctionName"參數(shù)1""參數(shù)2""參數(shù)3"
示例1
nsExec::ExecToLog'"$\makensis.exe"/CMDHELP'
執(zhí)行makensis.exe命令,顯示該命令用法。
示例2
Install Options::dialog"$PLUGINSDIR\test.ini"
顯示對話框
插件策略
默認(rèn)情況下NSIS在其安裝目錄的子目錄Plugins中搜索插件,用戶可以使用!add plugin dir指定增加插件的目錄位置。
版本列表
-
-
NSIS v3.04 官方版
NSIS(Nullsoft Scriptable Install System)是一 ...
軟件大小:1.45 MB 更新時(shí)間:2019-02-21