NSIS 浅析(结合soui2制作安装包)

脚本文件的默认扩展名是 .nsi ,头文件为 .nsh 。

#注释方式
;注释方式
/*注释方式*/


!Addplugindir "dir" #增加当前目录下插件的位置
!include Sections.nsh #引入文件


定义常量:!define PI 3.14

Var BLA ;声明变量
!echo "hello world"


${PI} #引用常量


StrCmp $RegistryLanguage "Chinese" Chinese English

如果 if(RegistryLanguage=="Chinese")
跳转Chinese
else
跳转English


!macro add a b c ;一个实现(a+b)*(a-b)的宏
IntOp $R0 ${a} - ${b} ;R0=a-b
IntOp $R1 ${a} + ${b} ;R1=a+b
IntOp ${c} $R0 * $R1 ;c = R0 * R1
!macroend

!insertmacro的参数会代入!macro里面使用


Push Pop使用方法,伪代码:
$0 = 'hello world'
·····一系列操作
Push $0 ;开始使用$0这个变量要改变它的值
StrCpy $0 10086 ;如果不使用Pop $0 那么$0 本来的值hello world会丢失找不回来
·····一系列操作
Pop $0 ;还原$0的值为hello world

IntCmp用法:
IntCmp $0 5 is5 lessthan5 morethan5
is5: ;$0 == 5
DetailPrint "$$0 == 5"
Goto done
lessthan5: ;$0 < 5
DetailPrint "$$0 < 5"
Goto done
morethan5: ;$0 > 5
DetailPrint "$$0 > 5"
Goto done
done:


IntCmp $R0 0 Done ;有点类似goto用法
·····一系列操作
Done:
一系列操作

读取注册表:
ReadRegStr $RegistrySdPath HKCU "Software\Idemera" "programpath"

在NSIS2.42之前,如果想插件在调用之后不被FreeLibrary,必须使用/NOUNLOAD参数 或SetPluginUnload alwaysoff

 

File 描述符用法:
[/nonfatal] [/a] ([/r] [/x file|wildcard [...]] (file|wildcard) [...] | /oname=file.dat infile.dat)
将要提取的文件添加到当前输出路径 ($OUTDIR)。

请注意,输出文件名为 $OUTDIR\filename_portion_of_file。
使用 /oname=X 开关更改输出名称。X 可能包含变量,可以是完全限定路径或相对路径,在这种情况下,它将附加到由 SetOutPath设置的$ OUTDIR。
使用此开关时,只能指定一个文件。如果输出名称包含空格,请引用整个参数,包括 /oname,如下例所示。
支持通配符。
如果使用 /r 开关,则在子目录中递归搜索匹配的文件和目录。如果只指定了一个路径段(例如 File /r something),
则将递归搜索当前目录。如果指定了多个段(例如 File /r something\*.*),则最后一个路径段将用作匹配条件,其余路径段将用于目录递归搜索。如果目录名称匹配,则递归添加其所有内容。目录结构被保留。
使用 /x 开关排除文件或目录。
如果使用 /a 开关,添加的文件的属性将被保留。
如果覆盖模式设置为“尝试”且无法覆盖文件,或者如果覆盖模式设置为“开启”且无法覆盖文件且用户选择忽略,则 File 命令设置错误标志。
如果使用 /nonfatal 开关但没有找到文件,则会发出警告而不是错误。

File something.exe
File /a something.exe
File *.exe
File /r *.dat
File /r data
File /oname=temp.dat somefile.ext
File /oname=$TEMP\temp.dat somefile.ext
File "/oname=$TEMP\name with spaces.dat" somefile.ext
File /nonfatal "a file that might not exist"
File /r /x CVS myproject\*.*
File /r /x *.res /x *.obj /x *.pch source\*.*

WriteUninstaller [Path\]exename.exe ;将卸载程序写入指定的位置


BgWorker::CallAndWait调用简单的Sleep函数

 

###########################################################################################################
SOUI2+NSIS
参考soui2官方给的例子依赖文件如下:
api.h
event.h
pluginapi.c #注意单独去除这个文件的预编译头使用
pluginapi.h
Utils.h


###########################################################################################################

posted on 2022-02-24 18:45  流若浅  阅读(351)  评论(0编辑  收藏  举报

导航