NSIS使用

时间:2024-04-07 08:10:22

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 "查看自述文件"		;自述文件单选框

 

 安装效果:

NSIS使用

 

NSIS使用

 

NSIS使用