一、NSIS介绍_胡沈员介绍

一、NSIS介绍_胡沈员介绍概述最近需要写一个安装程序,比对了一下现有的安装工具,最后选定了NSIS,最主要的原因一是开源、二是灵活。下面把我的要求简单列举下:1、需要检查系统环境是否满足要求2、需要界面友好的安装过程

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、NSIS介绍_胡沈员介绍概述

最近需要写一个安装程序,比对了一下现有的安装工具,最后选定了NSIS,最主要的原因一是开源、二是灵活。

下面把我的要求简单列举下:

1、需要检查系统环境是否满足要求

2、需要界面友好的安装过程

3、需要一些自定义界面,在安装过程中来获取一些必须的信息

4、需要根据界面的选择来执行或跳过一些安装过程

5、需要操作数据库

6、需要操作IIS

7、需要使用PowerShell命令设置AD/Exchange/Lync

8、需要操作注册表,用于标识安装步骤以用于卸载或回滚的执行

经过调查发现NSIS都能实现,但它有自己的一套脚本语言,需要学习成本,如果有编程基础这个其实不难,下载一个“NSIS用户手册”、一个”NSIS”(脚本编译)、一个“HM NIS Edit”(脚本编辑)一切就可以开始啦!

一、NSIS介绍_胡沈员介绍基本知识

那么首先,我们先看一下“NSIS用户手册”吧,你总得先了解一下NSIS这个东西的基本介绍和脚本的基本结构吧。

我把了解的最重要的东西列举一下,其他涉及到细节或遇到难题就可以随时查询用户手册或者google万能的网络:

1、安装程序的主体脚本文件 .nsi,可以包含一个或多个头文件 .nsh

头文件可以通过把它划分为一个或多个代码块来帮你编排你的脚本,你也可以在头文件里加入功能函数或宏,并且在多个安装程序里包含头文件,这样可以更容易的升级你的程序,并且使你的脚本很容易的让人看懂。

2、一个安装程序的基本结构包含应用程序的基本信息定义、头文件引用、安装程序属性设置、安装程序页面、区段(安装过程脚本)和函数(安装页面创建之前、显示前和离开前的代码)等

应用程序的基本信息定义:产品的名称、版本、发布者、网站等信息;头文件引用:!include ***.nsh;

安装程序属性设置:安装程序语言、安装程序名称、输出安装文件、默认安装目录等信息;

安装程序页面:内建页面(欢迎页面、许可页面、目录选择页面、组件选择页面、安装记录页面、完成页面)、自定义页面;

区段:安装程序执行的实体,每一个 NSIS 安装程序包含一个或多个区段;

函数:最终要的是页面的回调函数(每个内建页面有三个回调函数(预置函数、显示创建函数和离开函数)、自定义的页面仅有两个回调函数(创建函数和离开函数))、

再就是安装的回调函数(.onInit、.onInstFailed、.onInstSuccess等)、还可以有一些自定义的函数;

3、保存值和使用值

可以使用Var命令来声明变量,使用变量来保存值,所有定义的变量都是全局的,即使在区段或函数内定义。所以你可以声明变量、代码中对变量进行各种操作(赋值、比较、字符串操作等,使用变量需要加$),下面一个简单的例子:

 

Var str1
Var hasValue
Function StrOper
        StrCpy hasValue False     ; $hasValue = False
        ${If} $hasValue == True
              MessageBox MB_OK "$str1"
        ${EndIf}
  
        StrCpy $str1 "Hello,"     ; $str1 = Hello,
        StrCpy $str1 "$str1World" ; $str1 = Hello,World
        StrCpy hasValue True      ; $hasValue = True
        
        ${If} $hasValue == True
              MessageBox MB_OK "$str1"
        ${EndIf}
FunctionEnd

 

 另外一个保存值的方式是放入堆栈中,堆栈都知道是“先进后出”的,最重要的两个命令就是Push和Pop,下面一个简单的例子:

Var str1
Function StackOper
         Push "Hello"
         Pop $str1          ; $str1 = Hello
         Push "$str1 World" 
         Pop $str1          ; $str1 = Hello World
         MessageBox MB_OK "$str1"
FunctionEnd

NSIS脚本有一些内置的变量,如:$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $R0, $R1, $R2, $R3, $R4, $R5, $R6, $R7, $R8, $R9;这些变量可以像用户变量一样使用,但不用声明这些变量;另外还有一些特殊含义的内置变量,如:$INSTDIR、$OUTDIR等。

NSIS脚本还有一些常量,如:$PROGRAMFILES,$DESKTOP,$WINDIR,$STARTMENU,$EXEDIR等等,有需要可以查看帮助文档

4、指令

NSIS脚本的执行是依靠一个个的指令,这些指令包括字符串操作指令、数学操作指令、文件操作指令、注册表读写指令、用户界面指令、流程控制指令等等,具体指令可以随时查看用户手册,另外你还可以通过插件来扩展它的能力,这些插件通常是一个DLL文件,关于插件以后章节会详细说明。

以上,我们通过快速浏览NSIS用户手册,了解了脚本的基本结构和基本语法方面的信息。下面,我们需要搭建NSIS的开发和编译环境。

一、NSIS介绍_胡沈员介绍编译环境

下载了NSIS最新的安装包,根据向导一步步安装即可,安装完成后会在系统目录上有NSIS目录,里面就有用户手册和一些脚本例子,另外就是在脚本文件.nsi点击右键会出来NSIS快捷菜单,如下图所示:

一、NSIS介绍_胡沈员介绍一、NSIS介绍_胡沈员介绍

 

一、NSIS介绍_胡沈员介绍编辑/IDE工具

编译环境都好了,接下来就该说到编辑脚本的工具了,最简单的是用文本文件,其实任何可以编辑文本文件的工具都可以,但一是没有任何格式不好看,再就是对于一个才开始编辑NSIS脚本的新手来说一头雾水,不知从何下手啊,好了,工具来了,下载HM NIS Edit最新版本,这是一个针对NSIS的免费的编辑/集成开发工具,安装后就可以使用啦,我能告诉你它不光让脚本更容易读写,最最打动我的其实是它的新建脚本向导功能,我在无从下手时通过向导生成的脚本省了很多工夫,也通过这些脚本更深刻的理解了脚本的结构和一些语法信息,再就是通过菜单NSIS可以直接编译脚本,脚本编译过程的输出信息会在输出界面显示,错误直接定位,界面如下所示:

一、NSIS介绍_胡沈员介绍

 

好了,基本介绍啰啰嗦嗦这么多,应该有点记忆了吧,下章我们就从制作一个简单的NSIS安装包开始吧!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167755.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • hisi3516dv300学习笔记——编译hisi3516dv300的SDK

    hisi3516dv300学习笔记——编译hisi3516dv300的SDK先下载linux内核源码包,下载地址:https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/(1)编译整个osdrv目录:注意:默认不发布内核源码包,只发布补丁文件。内核源码包需自行从开源社区上下载。从linux开源社区下载v4.9.37版本的内核:1)进入网站:www.kernel.org2)选择HTTP协议资源的https://www.kernel.org/pub/选项,进入子页面3)选择linux/菜单项,进入子页面4)选择ker

    2022年9月23日
    2
  • db2查看数据库端口

    (1)查询数据库管理器配置参数,查找到端口名[test88:dsadm:/gpfsetl/etldata/lch]db2getdbmcfg|grepSVCENAME TCP/IPServicename                         (SVCENAME)=DB2_dsadm SSLservicename                       …

    2022年4月8日
    188
  • Unity中的Shuriken粒子系统(5)

    Unity中的Shuriken粒子系统(5)设置速度在生命周期内改变(曲线的设置)1.VelocityoverLifetime通过ParticleSystem中的StartSpeed,只能设置粒子发射的起始速度,不能改变粒子发射过程中的速度;而VelocityoverLifetime能够改变粒子在运动过程中的速度。当把StartSpeed设为0(粒子初始速度为0),VelocityoverLifetime只设置X的值…

    2025年7月4日
    2
  • Python实现排序算法之快速排序

    Python实现快速排序原理首先选取任意一个数据(通常选取数组的第一个数)作为关键数据,然后将所有比它小的放到它前面,所有比它大的放到它后面,这个过程称为一趟快速排序快速排序原理图如下:实现

    2021年12月18日
    57
  • jupyter的代码能用pycharm运行吗_pycharm 安装教程

    jupyter的代码能用pycharm运行吗_pycharm 安装教程在Pycharm中安装及使用Jupyter(图文详解)文章目录在Pycharm中安装及使用Jupyter(图文详解)一、材料二、安装Jupyter三、配置Jupyter四、使用Jupyter1.使用Cell2.使用jupyterMarkdownPycharm更新了对Jupyter的功能支持,结合IntelliJ的自动补全代码,自动格式化代码,执行调试…

    2022年8月25日
    5
  • datagrip2021激活码【在线破解激活】[通俗易懂]

    datagrip2021激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    242

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号