一. NSIS介绍
概述
最近需要寫(xiě)一個(gè)安裝程序,比對(duì)了一下現(xiàn)有的安裝工具,最后選定了NSIS,最主要的原因一是開(kāi)源、二是靈活。
下面把我的要求簡(jiǎn)單列舉下:
1、需要檢查系統(tǒng)環(huán)境是否滿足要求
2、需要界面友好的安裝過(guò)程
3、需要一些自定義界面,在安裝過(guò)程中來(lái)獲取一些必須的信息
4、需要根據(jù)界面的選擇來(lái)執(zhí)行或跳過(guò)一些安裝過(guò)程
5、需要操作數(shù)據(jù)庫(kù)
6、需要操作IIS
7、需要使用PowerShell命令設(shè)置AD/Exchange/Lync
8、需要操作注冊(cè)表,用于標(biāo)識(shí)安裝步驟以用于卸載或回滾的執(zhí)行
經(jīng)過(guò)調(diào)查發(fā)現(xiàn)NSIS都能實(shí)現(xiàn),但它有自己的一套腳本語(yǔ)言,需要學(xué)習(xí)成本,如果有編程基礎(chǔ)這個(gè)其實(shí)不難,下載一個(gè)“NSIS用戶手冊(cè)”、一個(gè)"NSIS"(腳本編譯)、一個(gè)“HM NIS Edit”(腳本編輯)一切就可以開(kāi)始啦!
基本知識(shí)
那么首先,我們先看一下“NSIS用戶手冊(cè)”吧,你總得先了解一下NSIS這個(gè)東西的基本介紹和腳本的基本結(jié)構(gòu)吧。
我把了解的最重要的東西列舉一下,其他涉及到細(xì)節(jié)或遇到難題就可以隨時(shí)查詢用戶手冊(cè)或者google萬(wàn)能的網(wǎng)絡(luò):
1、安裝程序的主體腳本文件 .nsi,可以包含一個(gè)或多個(gè)頭文件 .nsh
頭文件可以通過(guò)把它劃分為一個(gè)或多個(gè)代碼塊來(lái)幫你編排你的腳本,你也可以在頭文件里加入功能函數(shù)或宏,并且在多個(gè)安裝程序里包含頭文件,這樣可以更容易的升級(jí)你的程序,并且使你的腳本很容易的讓人看懂。
2、一個(gè)安裝程序的基本結(jié)構(gòu)包含應(yīng)用程序的基本信息定義、頭文件引用、安裝程序?qū)傩栽O(shè)置、安裝程序頁(yè)面、區(qū)段(安裝過(guò)程腳本)和函數(shù)(安裝頁(yè)面創(chuàng)建之前、顯示前和離開(kāi)前的代碼)等
應(yīng)用程序的基本信息定義:產(chǎn)品的名稱(chēng)、版本、發(fā)布者、網(wǎng)站等信息;頭文件引用:!include ***.nsh;
安裝程序?qū)傩栽O(shè)置:安裝程序語(yǔ)言、安裝程序名稱(chēng)、輸出安裝文件、默認(rèn)安裝目錄等信息;
安裝程序頁(yè)面:內(nèi)建頁(yè)面(歡迎頁(yè)面、許可頁(yè)面、目錄選擇頁(yè)面、組件選擇頁(yè)面、安裝記錄頁(yè)面、完成頁(yè)面)、自定義頁(yè)面;
區(qū)段:安裝程序執(zhí)行的實(shí)體,每一個(gè) NSIS 安裝程序包含一個(gè)或多個(gè)區(qū)段;
函數(shù):最終要的是頁(yè)面的回調(diào)函數(shù)(每個(gè)內(nèi)建頁(yè)面有三個(gè)回調(diào)函數(shù)(預(yù)置函數(shù)、顯示創(chuàng)建函數(shù)和離開(kāi)函數(shù))、自定義的頁(yè)面僅有兩個(gè)回調(diào)函數(shù)(創(chuàng)建函數(shù)和離開(kāi)函數(shù)))、
再就是安裝的回調(diào)函數(shù)(.onInit、.onInstFailed、.onInstSuccess等)、還可以有一些自定義的函數(shù);
3、保存值和使用值
可以使用Var命令來(lái)聲明變量,使用變量來(lái)保存值,所有定義的變量都是全局的,即使在區(qū)段或函數(shù)內(nèi)定義。所以你可以聲明變量、代碼中對(duì)變量進(jìn)行各種操作(賦值、比較、字符串操作等,使用變量需要加$),下面一個(gè)簡(jiǎn)單的例子:
Var str1 Var hasValue Function StrOperStrCpy hasValue False ; $hasValue = False${If} $hasValue == TrueMessageBox MB_OK "$str1"${EndIf}StrCpy $str1 "Hello," ; $str1 = Hello,StrCpy $str1 "$str1World" ; $str1 = Hello,WorldStrCpy hasValue True ; $hasValue = True${If} $hasValue == TrueMessageBox MB_OK "$str1"${EndIf} FunctionEnd?另外一個(gè)保存值的方式是放入堆棧中,堆棧都知道是“先進(jìn)后出”的,最重要的兩個(gè)命令就是Push和Pop,下面一個(gè)簡(jiǎn)單的例子:
Var str1 Function StackOperPush "Hello"Pop $str1 ; $str1 = HelloPush "$str1 World" Pop $str1 ; $str1 = Hello WorldMessageBox MB_OK "$str1" FunctionEndNSIS腳本有一些內(nèi)置的變量,如:$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $R0, $R1, $R2, $R3, $R4, $R5, $R6, $R7, $R8, $R9;這些變量可以像用戶變量一樣使用,但不用聲明這些變量;另外還有一些特殊含義的內(nèi)置變量,如:$INSTDIR、$OUTDIR等。
NSIS腳本還有一些常量,如:$PROGRAMFILES,$DESKTOP,$WINDIR,$STARTMENU,$EXEDIR等等,有需要可以查看幫助文檔。
4、指令
NSIS腳本的執(zhí)行是依靠一個(gè)個(gè)的指令,這些指令包括字符串操作指令、數(shù)學(xué)操作指令、文件操作指令、注冊(cè)表讀寫(xiě)指令、用戶界面指令、流程控制指令等等,具體指令可以隨時(shí)查看用戶手冊(cè),另外你還可以通過(guò)插件來(lái)擴(kuò)展它的能力,這些插件通常是一個(gè)DLL文件,關(guān)于插件以后章節(jié)會(huì)詳細(xì)說(shuō)明。
以上,我們通過(guò)快速瀏覽NSIS用戶手冊(cè),了解了腳本的基本結(jié)構(gòu)和基本語(yǔ)法方面的信息。下面,我們需要搭建NSIS的開(kāi)發(fā)和編譯環(huán)境。
編譯環(huán)境
下載了NSIS最新的安裝包,根據(jù)向?qū)б徊讲桨惭b即可,安裝完成后會(huì)在系統(tǒng)目錄上有NSIS目錄,里面就有用戶手冊(cè)和一些腳本例子,另外就是在腳本文件.nsi點(diǎn)擊右鍵會(huì)出來(lái)NSIS快捷菜單,如下圖所示:
編輯/IDE工具
編譯環(huán)境都好了,接下來(lái)就該說(shuō)到編輯腳本的工具了,最簡(jiǎn)單的是用文本文件,其實(shí)任何可以編輯文本文件的工具都可以,但一是沒(méi)有任何格式不好看,再就是對(duì)于一個(gè)才開(kāi)始編輯NSIS腳本的新手來(lái)說(shuō)一頭霧水,不知從何下手啊,好了,工具來(lái)了,下載HM NIS Edit最新版本,這是一個(gè)針對(duì)NSIS的免費(fèi)的編輯/集成開(kāi)發(fā)工具,安裝后就可以使用啦,我能告訴你它不光讓腳本更容易讀寫(xiě),最最打動(dòng)我的其實(shí)是它的新建腳本向?qū)Чδ?#xff0c;我在無(wú)從下手時(shí)通過(guò)向?qū)傻哪_本省了很多工夫,也通過(guò)這些腳本更深刻的理解了腳本的結(jié)構(gòu)和一些語(yǔ)法信息,再就是通過(guò)菜單NSIS可以直接編譯腳本,腳本編譯過(guò)程的輸出信息會(huì)在輸出界面顯示,錯(cuò)誤直接定位,界面如下所示:
好了,基本介紹啰啰嗦嗦這么多,應(yīng)該有點(diǎn)記憶了吧,下章我們就從制作一個(gè)簡(jiǎn)單的NSIS安裝包開(kāi)始吧!
總結(jié)
- 上一篇: apache根据ip分发_腾讯广告进入“
- 下一篇: sigquit信号默认忽略吗_老妹儿,你