NSIS使用
NSIS是一款很流行的开源安装程序制作工具,可以通过编写脚本生成功能丰富的安装程序。
一. NSIS语法
语法结构与shell类似,支持函数定义,插件DLL调用,功能非常强大。NSIS脚本包括安装属性(Installer Attributes)和段(Sections)/函数(Functions)。
1.1 安装页
安装页显示,可灵活选择其中几项进行定制:
Page license#许可证页
Page components#组件选择
Page directory#安装目录选择
Page instfiles#安装明细
UninstPage uninstConfirm#卸载确认页
UninstPage instfiles#卸载明细
Var BLA ;变量定义
Section bla
StrCpy $BLA "123" ;设置变量值为"123"
StrCpy $R1 0 ;R0-R9为NSIS提供的寄存器变量,不需要定义
${While} $R1 < 5 ;while循环结构
IntOp $R1 $R1 + 1
DetailPrint $R1
${EndWhile}
SectionEnd
1.2 调用第三方库
NSIS强大之处在于可以很方便的调用第三方库,加之windows api本身就整得很复杂了,调用比较繁琐。数据类型如下:
v - void (generally for return)
i - int (includes char, byte, short, handles, pointers and so on)
l - long & large integer (known as int64)
t - text, string (LPCSTR, pointer to first character)
b - boolean (needs/returns 'true':'false') - by the fact this type is senseless -> usual integer can be used ('0':'1')
k - callback. See Callback section in system.html.
* - pointer specifier
映射System.dll变量为NSISI变量类型
NSIS $0..$9 变为 System.dll r0..r9
NSIS $R0..$R9 变为 System.dll r10..r19
调用形式
System::Call 'YourDllName::YourDllFunction(i, *i, t) i(.r0, r1r1, .r2) .r3'
(i, *i, t) i 函数类型为int,int*和String,返回值为int
(.r0, r1, .r2)输入部分,.r0(输出参数,放入$0)r1r1(输入输出参数,放入$1) .r2(输出参数,放入$2)
.r3 返回值储存至r3
例如:
int CmGetHotSyncExecPath(TCHAR *pPath, int *piSize);
调用:
Function loadDll SetOutPath $TEMP\eInspect ;建立临时目录 File bin\CondMgr.dll ;拷贝Condmgr.dll至临时目录 StrCpy $1 ${NSIS_MAX_STRLEN} ; assign memory to $0 System::Call 'CondMgr::CmGetHotSyncExecPath(t, *i) i(.r0, r1r1).r2' DetailPrint 'Path: "$0"' DetailPrint "Path length: $1" DetailPrint "Return value: $2" System:Free 0 ;卸载dll FunctionEnd
直接填充参数
System::Call 'kernel32::GetCurrentDirectory(i 1024,t .R1)'
二. NSIS Edit
如果安装程序逻辑比较简单,可以直接用NSIS Edit可视化工具来生成脚本代码。
新建脚本:向导,下一步,直到生成安装程序。你会发现默认生成界面比较丑陋,还有NSIS的LOGO,可通过编辑生成*.nsi脚本更换。
安装界面修改:
; MUI Settings 下添加如下两行代码:
; MUI Settings !define MUI_WELCOMEFINISHPAGE_BITMAP "C:\Users\kettas\Desktop\wel.bmp" ;欢迎界面,图片大小为165*298 !define MUI_WELCOMEPAGE_TITLE "\r\n 绿色上网v2.0" ;安装标题 !define MUI_WELCOMEPAGE_TEXT "绿色上网大师,为您和您的家人提供一个健康安全的上网环境。\r\n\r\n 软件汉化:charlotte\r\n\r\n $_CLICK" ;软件描述信息
底部NSIS LOGO修改:
ShowUnInstDetails show 下添加代码:
ShowUnInstDetails show BrandingText " 大地集团出品" ;软件Logo定义
安装自述文件查看:
; Finish page !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\readme.txt" ;自述文件路径 !define MUI_FINISHPAGE_SHOWREADME_TEXT "查看自述文件" ;自述文件单选框
安装效果: