NSIS使⽤教程(安装包制作安装⽂件教程,如何封装打包⽂
件)中⽂版
nsis中⽂版(Nullsoft Scriptable Install System)是⼀个专业的开源的可以⽤来封闭Windows程序的实⽤⼯具,是⼀个开源的 Windows 系统下安装程序制作程序。nsis它功能强,源码是直接使⽤C语⾔编写⽽成,并且可以直接到nsis官⽹下载所有nsis版本,并且提供了详细的帮助⽂档,⽅便⽤户制作时使⽤.安装页⾯可以使⽤Page⾃定义界⾯、卸载页⾯可以配置让⽤户选择是否删除⽤户⽂件、系统设置中对注册表的操作简单⽅便,可以使⽤REGDLL进⾏动态库的注册,还可以使⽤诸如EXECWAIT来执⾏外部程序,还可以⽤SC等命令或插件来完成服务注册安装、提供lzma固实⽂件解压缩极强的压缩性能尤为突出,并且提供上百的插件扩展使得程序编写更加得⼼应⼿,在封装功能,速度,稳定性等⽅便更胜⼀筹。
Nullsoft Scriptable Install System(nsis定制安装程序)V2.45增强版
1.1 代码注释
在nsis中可以使⽤单⾏注释,和多⾏注释,多⾏注释不⽀持嵌套。:#,;,/**/
#OutFile "注释.exe"
;Section ""
/*
MessageBox MB_OK "Hello World!"
SentionEnd
*/
1.2 转义字符和续⾏符
转意字符⽤"$\"作前缀。美元符号、常⽤转意字符换⾏、回车、制表符的nsi语法表⽰分别为:$$,$\n,$\r,$\t
nsi脚本⽤⾏尾的反斜杠"\"表⽰下⼀⾏和当前⾏逻辑上是同⼀⾏
1.3 互斥运⾏
调⽤系统API创建互斥进程
OutFile ""
Section "Temp"
SectionEnd
Function .onInit
InitPluginsDir
;创建互斥防⽌重复运⾏
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "Temp") i .r1 ?e'
Pop $R0
StrCmp $R0 0 +3
MessageBox MB_OK|MB_ICONEXCLAMATION "The program is runing!"
Abort
FunctionEnd
1.4 7-Zip 打开空⽩
实现7-Zip打开空⽩
!system '>blank set/p=MSCF<nul' !packhdr temp.dat 'cmd /c Copy /b temp.dat /b +blank&&del blank'
如果你想增加⼀个有内容的7z压缩到可执⾏⽂件头部,那么在脚本开始位置增加下⾯这⾏代码就可以了:
!packhdr temp.dat 'cmd /c Copy /B temp.dat /B +外链压缩包.7z temp.dat'
1.5 压缩资源头
压缩资源,直接⽤资源查看器会提⽰已加壳,需要先脱壳才能查看资源!packhdr "p" '"" -4 "p"'
1.6 关于nsis中的变量使⽤
#程序输出名称
OutFile ""
#设置压缩⽅式
SetCompress force
SetCompressor /SOLID lzma
#是否进⼊调试模式
#!define _DEBUG ""
#安装⽬录
!define InstDir "$PROGRAMFILES\Variables"
杨贵妃醉酒歌词#压缩资源
!packhdr "p" '"" -4 "p"'
#区段
Section "nsis变量"
#在安装过程中改变安装⽬录
StrCpy "$INSTDIR" "$EXEDIR\Variables"
#设置输出⽬录
SetOutPath "$INSTDIR"
#显⽰输出⽬录
DetailPrint "$OUTDIR"
#将.(当前⽬录)打包和程序,安装⽬录为$INSTDIR
File /r ".\*.nsi"
File /r ".\*.7z"
#输出当前主程序⽬录
DetailPrint "$EXEDIR"
#输出当前使⽤的语⾔标记符
DetailPrint "输出当前使⽤的语⾔标记符$LANGUAGE"
临时文件清理#"nsis命令⾏参数操作"
Call nsis_cmdline
SectionEnd
Function nsis_cmdline #"nsis命令⾏参数操作"
#使⽤变量$CMDLINE获得命令⾏信息
!ifdef _DEBUG
MessageBox MB_OK|MB_ICONINFORMATION "$CMDLINE" !endif
DetailPrint "$CMDLINE"
#使⽤宏来处理命令⾏信息,它也是基于对$CMDLINE的信息进⾏处理 !include FileFunc.nsh
${GetParameters} $R0 # 获得命令⾏
${GetOptions} $R0 "/T" $R0 # 在命令⾏⾥查是否存在/S选项 !ifdef _DEBUG
IfErrors 0 +2
MessageBox MB_OK "Not found" IDOK +2
MessageBox MB_OK "Found"
!endif
IfErrors 0 +3
DetailPrint "Not found"
goto +2
DetailPrint "Found"
FunctionEnd
这些变量也可以在插件⾥传递,因为他们可以被 DLL 插件读取和写⼊enum
{
INST_0, // $0
INST_1, // $1
INST_2, // $2
INST_3, // $3
INST_4, // $4
INST_5, // $5
INST_6, // $6
INST_7, // $7
INST_8, // $8
INST_9, // $9
INST_R0, // $R0
INST_R1, // $R1
INST_R2, // $R2
INST_R3, // $R3
INST_R4, // $R4
INST_R5, // $R5
INST_R6, // $R6
INST_R7, // $R7
INST_R8, // $R8
个人身份证贷款INST_R9, // $R9
INST_CMDLINE, // $CMDLINE
INST_INSTDIR, // $INSTDIR
INST_OUTDIR, // $OUTDIR
INST_EXEDIR, // $EXEDIR
INST_LANG, // $LANGUAGE
__INST_LAST
};
*/
1.7 关于nsis中的界⾯制作
#头⽂件
!include nsDialogs.nsh
#设置压缩⽅式
SetCompressor /SOLID lzma
#⽀持XP风格
XPStyle on
#标题栏,输出⽂件,图标
Caption "NSIS⾃定义界⾯中⽂版教程"
OutFile "NSIS⾃定义界⾯中⽂版教程.exe"
#变量定义
Var Dialog
Var Image1
#页⾯
Page custom page1
#初始化函数
Function .onInit
InitPluginsDir
SetOutPath "$PLUGINSDIR"
File "Image\*.*"
FunctionEnd
#页⾯函数
Function page1
nsDialogs::Create /NOUNLOAD 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSd_CreateBitmap} 0 0 100% 100% '全屏图⽚'
Pop $Image1
${NSD_SetImage} $Image1 '$PLUGINSDIR\bg.bmp' $1 nsDialogs::show
FunctionEnd
Section "NSIS⾃定义界⾯中⽂版教程"
SectionEnd
1.8 关于nsis中的字符串处理
!include "WordFunc.nsh"
OutFile "关于nsis中的字符串处理.exe"
Var stemp
Section "关于nsis中的字符串处理"
StrCpy $stemp '您的IP地址是:[23.52.1.54]关于nsis中的字符串处理' ${WordFind} "$stemp" "]" "-2{*" $R0
${WordFind} "$R0" "[" "+2*}" $R1
MessageBox MB_OK $R1
Push $stemp
Call GetIP
买房子注意什么Pop $R0
MessageBox MB_OK $R0
SectionEnd
Function GetIP
Exch $0
张无忌异界纵横Push $1
Push $2
StrCpy $1 0
IntOp $1 $1 - 1
StrCpy $2 $0 1 $1
StrCmp $2 "]" +2
StrCmp $2 "" 0 -3
StrCpy $0 $0 $1
StrCpy $1 0
IntOp $1 $1 - 1
StrCpy $2 $0 1 $1
StrCmp $2 "[" +2
StrCmp $2 "" 0 -3
IntOp $1 $1 + 1
StrCpy $0 $0 "" $1
Pop $2
Pop $1
Exch $0
FunctionEnd
1.9 关于nsis中的API调⽤
#头⽂件
!include "WordFunc.nsh"
#输出⽂件
OutFile "关于nsis中的API调⽤.exe"
#区段
Section "关于nsis中的API调⽤"
梦见抱小男孩#获得磁盘可⽤空间
StrCpy $0 "D:\"
System::Call kernel32::GetDiskFreeSpaceEx(tr0,*l,*l,*l.r1)
MessageBox MB_OK "$0的可⽤空间为:$1"
; Create RECT struct
#获得窗⼝矩形⼤⼩
System::Call `*(i, i, i, i) i .R0`
System::Call `user32::GetClientRect(i $HWNDPARENT, i R0)`
System::Call `*$R0(i.R1, i.R2, i.R3, i.R4) i`
System::Free $R0
MessageBox MB_OK " Left:$R1$\n Top:$R2$\n Right:$R3$\n Bottom:$R4$\n" SectionEnd
NSIS 常⽤⼩问题问答合集
问: 如何⽤ NSIS 安装输⼊法。
答: 以下代码:
SetOutPath $SYSDIR
File WBIME.ime
Push "五笔输⼊法"
Push "$SYSDIR\WBIME.ime"
System::Call "Imm32::ImmInstallIME(t s, t s) i .s"
System::Call "Imm32::ImmIsIME(i s) i .s"
Pop $0
IntCmp $0 1 0 +3 +3
MessageBox MB_OK "输⼊法安装成功"
Goto +2
MessageBox MB_OK "输⼊法安装失败"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论