NSIS 的使用心得

      最近开发了一个项目,需要做成安装程序给客户,但是使用微软的安装和部署却遇到了很多的问题。而且编译得到的文件非常的大,无奈之余,发现一个很好的安装程序自作软件----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:

  相当的简单。 

posted @ 2009-11-18 09:56 萧萧空间 阅读(...) 评论(...) 编辑 收藏