NSIS使用心得Ⅰ (ZT)
NSIS(Nullsoft Scriptable Install System)适用于Windows下的一款安装程序制作工具。虽然它的功能不如InstallShield 和 InstallAnyWhere 的功能强大,也不象 InstallWise 那么易用,但它的确是一个值得了解的工具软件。' `9 b3 F4 V: Q a1 p
. q- y, M& H" i首先NSIS是一款免费软件,使用的时候不存在盗版或正版的问题。这也给了我们这些穷孩子以学习的机会。(感谢那些为开源软件做贡献的人!敬礼)* H5 `1 S* |6 O2 u
- k( @$ a T" @3 v
当然,很多软件企业也使用这款软件,比如聊天软件QQ,刻录软件Nero,Web Service软件Tomcat,虽然它们没有在【BrandingText】后面标注使用的是【Nullsoft Scriptable Install System】,而是标上企业或产品的名称,但这并不影响NSIS受欢迎的程度。
! c. T! L* E" i/ [
5 F6 E8 P) d; O4 j我使用的版本是2.10,因为我开始使用NSIS的时候就已经出到这个版本了。下载后进行安装,在NSIS目录下,有一个VNISEdit.exe的文件,我平时用的比较多的是这个。打开VNISEdit后,就会出现脚本编辑窗口。NSIS的脚本有点类似C语言。
" f7 u* S s& G$ T" @- E3 s) _% }! a L! U8 o, e9 Y* B( p# k9 Z
用一段以前写的脚本代码来介绍一下脚本编写方法。(鄙人才疏学浅,如有不正确的地方请各路高人批评指正)
' ?# c: S0 z g4 E0 A( u. W# {* ]- I" g
/* ------------------------------------------------------------------*/# g% m8 r4 F8 D7 O9 t
! A3 V: I2 `0 ~: I% Z) J/ P" ^
!define PRODUCT_NAME "产品名称"
( X% d o0 h6 s4 d$ |; p" y!define PRODUCT_VERSION "产品版本号"% l4 i. @; R. [4 A7 g9 u4 W
!define PRODUCT_PUBLISHER "产品发布者"
$ u/ ?# a Q% A, S) J!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\产品.exe"
) k, Q6 X7 \; y4 ] P3 ]!define PRODUCT_UNINST_KEY "Software\Microsoft\Windwos\CurrentVersion\Uninstall\${PRODUCT_NAME}" #这里定义的变量,最后会显示在控制面板的添加/删除程序的列表里。1 w7 l0 `$ {" U' c, G6 L. W3 h
+ T6 d# ?( m; Z
SetCompressor lzma #设置文件压缩格式,NSIS共提供3种压缩格式。4 C( `! j" P+ {0 i! Q1 ]) }) t2 @
3 e2 u: x/ d f5 P!include "MUI.nsh" #引入新式用户界面函数库/ I9 E, [9 u' Q3 O4 ?
!include "StrFunc.nsh"9 h7 h5 H; {! A+ \9 d
!include "Library.nsh"6 _/ x4 _8 Q2 T; ^5 B. J6 f
! v+ y u) U- _3 w, ^; ~!define MUI_ABORTWARNING #安装未完成,而用户要退出时显示提示。3 J: W- j( y5 Z5 L6 n2 z8 U
; \7 i$ k% z3 }1 C1 {& A8 z!define MUI_ICON "安装图标"
9 t) N# ?& I+ _!define MUI_UNICON "卸载图标"0 g; W+ O2 f2 g/ G7 x
" g5 M. D4 l$ y O' D!define MUI_HEADERIMAGE #标题图片,可放产品/公司的图片。2 w$ w1 p$ C' T: Z; U3 Z
!define MUI_HEADERINAGE_RIGHT #标题图片所在位置,左/右。
?) c& k4 I' Z$ B; T5 G, u!define MUI_HEADERIMAGE_BITMAP "标题图片"
8 [8 D1 C! A, K8 ?& P/ e" n9 y
# b6 {, a7 K G1 l!define MUI_WELCOMEPAGE_TITLE "欢迎使用“产品”安装向导" #欢迎界面1 `; H3 q Q% w' X9 _1 X$ O
!define MUI_WELCOMEPAGE_TEXT "\r\n这个安装向导将指引你完成“产品”的安装进程。\r\n\r\n开始安装前,建议先关闭其他所有应用程序。\r\n\r\n$_CLICK"
, e8 y9 r* ~5 s! m8 z!insertmacro MUI_PAGE_WELCOME
! E+ ]# s" `; E2 `& J8 Q; G3 R U' \3 i y- {
!define MUI_LICENSEPAGE_TEXT_TOP "阅读协议的其余部分,请按<PgDn>往下滚动页面。" #协议显示界面* H6 O2 B! m( V- G
!define MUI_LICENSEPAGE_TEXT_BOTTOM "如果同意协议中的条款,请选择“接受协议中的条款”并$_CLICK"
* m+ A2 ^- s" h0 ^) A0 n, u!define MUI_LICENSEPAGE_RADIOBUTTONS #协议条款接受选择,也有别的协议接受方式,看个人爱好。
% d/ `8 v. c$ s5 j# Q!define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT "接受协议中的条款"# F4 e' _* T; W- G
!define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE "不接受协议中的条款"
( K; Y7 S7 u1 @3 o) }, Q; o% Z!insertmacro MUI_PAGE_LICENSE "License.txt" #你的协议文件" z; e1 F. t \: V
( x0 n1 D# a2 X( e( m' Z( ] j. T& ]/ y!insertmacro MUI_PAGE_COMPONENTS #程序组件界面,用来选择要安装的程序组件
7 A1 D# @8 l+ n; ?. b' `: _- q1 u5 Q7 C! _- S
!insertmacro MUI_PAGE_DIRECTORY #程序的安装目录7 Z; R/ t+ W- m. m4 z& P
! q" y1 r+ W0 G!insertmacro MUI_PAGE_INSTFILES #程序安装进程显示
$ I* p) ~: P4 R3 k8 P8 W* v0 n6 u2 G/ x' s* N ~
!insertmacro MUI_PAGE_FINISH #安装完成界面
$ D2 z2 _# o# w
* a2 \+ b1 c, r9 ~!insertmacro MUI_UNPAGE_WELCOME #卸载欢迎界面
0 [5 v9 ]7 {( O! `# S6 R: n0 P3 x( A, b5 Y3 w0 C! [6 @
!insertmacro MUI_UNPAGE_CONFIRM #卸载确认界面4 ^' V% E/ G D( g6 ]) T. c3 o
/ v! V; z0 J) K& H U9 b
!insertmacro MUI_UNPAGE_INSTFILES #卸载进程显示
9 y/ `$ u, A# o" C) E1 \& I$ s3 [- e- ~3 r
!insertmacro MUI_UNPAGE_FINISH #卸载完成界面
7 y( B2 V( E' z2 i
/ s1 m- D' y% R1 A6 H% {$ w% J! L!insertmacro MUI_LANGUAGE "SimpChinese" #界面语言设置【简体中文】: i! k6 _, z' x2 K9 t0 L3 Z: I8 O) @
5 `& _5 t- A! dName "产品名称" #标题栏显示文字% V. r8 q6 _; A3 O
$ N9 D+ }5 l/ N8 r; `' ?& K: m
OutFile "Setup.exe" #输出文件
% {0 q. i2 g, w& T2 V# A9 i6 j
+ k3 D- ^( R1 NInstallDir "$PROGRAMFILES\产品名称" #程序安装路径,默认是"C:\Programfiles\"
% K# r/ G- Q/ L) g8 J' h$ j& c: H# M
K4 R' ]* I$ u) E$ V7 i' nInstallDirRegKey HKCU "Software\产品名称" ""
7 j2 n& F& x6 c6 g- A5 }+ b- U
) V7 z; g1 k0 S0 }7 y* c ?" }/ LShowInstDetails hide #显示安装详细信息,3种选择。5 g- P, b" S1 T
( N0 D( j5 C, C+ ^8 d. }. a% d
ShowUninstDetails hide #显示卸载详细信息,3种选择。
0 d% p6 W6 K# O; v/ ]1 B3 N) }% U! `+ \
BrandingText "NSIS" #安装界面左下角显示的文字,默认是Nullsoft Install System vX.XX; b0 z7 b+ v+ k* r' n
& c7 E3 R* b% ~5 O% Y
#开始主程序
6 A% p/ S, _3 |6 f+ m @: w/ Y7 |* Y. g4 K( K
Section "主程序" SecMain3 B5 U B9 m8 R
SetDetailsPrint textonly #InstFiles界面进度条上面显示的文字
4 M) W" B( i: c7 q DetailPrint "正在安装必须的程序组件..."
+ u! M1 S# u* ]" v' r8 W% o( k SetDetailsPrint none
2 X6 v3 W6 f$ l M: _( S$ ]# r6 N y; J8 T; @+ _# B0 r
SectionIn RO #如果指定 RO 作为一个参数,则该区段将被设为只读区段。
( u% ]( w' ?& X6 H! r SetAutoClose true
2 m: W: D" q# z8 p8 [
" p5 [9 u4 v; B' R7 v! w# ?2 f SetOutPath $INSTDIR #程序文件的输出路径
. F% l! `$ O* i, K3 S9 n File "产品.exe"
5 d- H7 O+ [; c# t" Z- \
. O3 y; M; q8 w7 s5 `, B3 |SectionEnd. R9 e8 `% O+ [ T8 i$ o
+ _: x+ E! |' n# n$ j
Section -Post* C" {! a! z) C
2 |7 I1 n& D/ ]3 J/ E- X, \ SetDetailsPrint textonly+ B) f7 F+ C0 ~1 D" a2 O0 z4 p- ~
DetailPrint "正在写入注册信息..."
4 G5 K' u: T z) h( F SetDetailsPrint none3 |. ]& N/ ]1 N1 \: ]' ~" h; f8 }2 N
7 D' }+ L( G( I2 G* Q! Z' @5 _ WriteUnInstaller "$INSTDIR\Uninst.exe"
) s$ L w; o0 H( ~2 B WriteRegStr HKCU "Software\产品名称" "" "$INSTDIR"
4 v: e/ C8 Z0 J" l- z) s. y9 y' { WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\产品.exe"9 S6 I" ?1 \8 P# F" O+ |, Z
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""DisplayName""$(^Name)"
2 d% r' x4 R$ E% N: r WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString""$INSTDIR\uninst.exe"
, n$ |9 H9 l- F
% [6 F, x; m; j' c( ?$ r0 dSectionEnd
4 P+ w$ L4 |, I% t% X" k" M. c) ]+ Y x2 g. | r
Section Uninstall
I- _2 N3 o6 Q SetDetailsPrint textonly8 t# k9 H; _# h6 r4 V
DetailPrint "正在卸载$(^Name)..."
4 V% Z2 }+ D* v" l SetDetailsPrint none4 ` N/ A8 F; x% ` w
& p7 G/ K$ h6 q7 z3 y8 [ Delete "$INSTDIR\Uninst.exe"1 @2 w7 J5 w. T* f R1 b7 C& p
$ o; o! @ K9 C1 H/ @) ]0 Z' R1 G Delete /REBOOTOK "$INSTDIR\产品.exe"
* y3 ^( X: p- N7 Z l RMDir /r /REBOOTOK "$INSTDIR"# ~- V. P( x% D* s2 Q u
) G7 L* X5 l C( x3 e0 q. _7 d DeleteRegKey HKCU "Software\产品名称"7 V! c8 J& X5 ]1 C2 C* i
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"& @$ R" P5 M$ @# ]$ J
DeleteRegKey HKLM "${PRODUCT_UNINST_KEY}"8 p8 D9 J2 g) Z5 J
1 m) L: A# l2 F7 N, a4 \8 |
SectionEnd- p9 W. q' v2 `# C% x9 ^
- S. y9 v# n2 u, a/* ------------------------------------------------------------------*/ % O O5 @1 b, v. b+ X* [, N* S
/ p$ ~( k5 [! g2 ~. `5 `) T删减了一些代码(在以后的文章中会逐步写出来),后面的一部分没有写详细注释,主要是看帮助文档就可以弄清楚了。帮助文档写的很详细,写这一篇,希望抛砖引玉,能看到更好的关于NSIS的文章。