最近开发了一个项目,需要做成安装程序给客户,但是使用微软的安装和部署却遇到了很多的问题。而且编译得到的文件非常的大,无奈之余,发现一个很好的安装程序自作软件----NSIS(Nullsoft Scriptable Install System),这是一个基于脚本的安装程序制作工具,不仅使用了安装程序制作向导,而且还可以自定义开发自己的应用,简单而且使用,并且压缩后的文件想当的小,感觉很好,特介绍给大家。
NSIS的官方地址是:http://nsis.sourceforge.net/Main_Page
NSIS的下载地址是:http://nsis.sourceforge.net/Download,目前最新的版本为2.45
NSIS的帮助文档是:http://nsis.sourceforge.net/Docs/,并且在安装中也带有自己的安装文档。
NSIS的官方定义是:
NSIS (Nullsoft Scriptable Install System) is a professional open source system to create Windows installers. It is designed to be as small and flexible as possible and is therefore very suitable for internet distribution.
下面是我使用NSIS的一些体会,NSIS使用非常方便,而且对我这个喜欢编程的人来说更加容易:
判断DotNetFrameWork是否安装,可以自己添加如下的代码:
Function IsNetfx35Installed
;Check is Net 3.5 is install
;Push 0 for true, Pop -1 for false
${registry::Read} "HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v3.5" "SP" $R0 $R1
${If} $R1 == ""
Push -1
${Else}
Push 0
${EndIf}
FunctionEnd
这是一个定义函数,他首先可以使用${registry::Read}来读取注册表中的值,并放入$R0 $R1,分别是类型和值,判断获取的值是不是为空,就可以判断是不是安装过.NET Framework 3.5了。
安装.NET Framework 3.5:
Function InstallDotNetFx
SetOutPath "$PLUGINSDIR"
Banner::show /NOUNLOAD "正在安装.NET运行库,请耐心等待..."
ExecWait '"$EXEDIR\DotNetFX35\dotNetFx35setup.exe"' $0
pop $0
${If} $0 != "0"
Banner::destroy
abort
${EndIf}
Banner::destroy
FunctionEnd
这是.NET Framework 3.5的安装,我选择了dotNetFx3.5的离线安装包,并将其放在安装文件的目录下,这样可以不把
.NET Framework 3.5打包到程序中,减少程序的大小。$EXEDIR是NSIS的内部程序常量,可以获取安装文件的目录。而且他还提供了很多的内部宏和常量。
插件的自作,需要访问已经安装的程序目录,这就要使用对其注册表的方法,将程序的安装目录获取,对于NSIS,这也是相当的简单的。
首先在安装目录的最上方:
InstallDir "$PROGRAMFILES\Test"
修改为:
InstallDirRegKey HKLM "SOFTWARE\Test" "Path"
然后在Function .onInit中添加如下的内容:
StrCmp $INSTDIR "" 0 Continue
MessageBox MB_OK|MB_ICONSTOP "Test 未安装,请先安装Test。"
Abort
Continue:
相当的简单。