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 @   萧萧空间  阅读(5311)  评论(13编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示