当前位置: 首页 > news >正文

NSIS 入门教程 (一)

 介绍

大多数应用程序都附带一个安装程序,它将所需的文件复制到正确的文件夹中,创建注册表项,并提供卸载例程以(希望)从计算机中彻底删除应用程序. 有多种解决方案可以为自主开发的应用程序配备安装程序。除了Install Shield或Wise等商业产品外,还有开源安装工具Nullsoft Scriptable Install System (NSIS)。在本教程中,我将展示使用 NSIS 创建安装程序的一些简单步骤

在第一部分中,将介绍一些基础知识,然后我们创建了第一个真正的安装程序。第二部分涵盖卸载主题和安装程序的其他对话框。在第三部分中,将为安装人员提供了更现代的外观

下载与安装

NSIS 可以从 NSIS官方 下载。如果你感觉全英文界面不适应或者不符合你的操作习惯,也可以在 我的博客 中下载简体中文版本! 然后启动下载的文件,它会安装 NSIS。一般情况下采用默认值完成安装即可。

基础与入门

NSIS 创建一个安装文件,其中包含所有要安装的文件和安装脚本。为此,您必须创建一个描述安装步骤的 NSIS 脚本。 NSIS 脚本是一个普通的文本文件,可以使用任何文本编辑器进行编辑。由于 NSIS 会在错误消息中标定受影响的代码行,因此使用可以显示行号的文本编辑器是必要的。

NSIS wiki有 专门针对 NSIS 的编辑器列表。我在本教程中 使用 简体中文版HM NISEdit

NSIS 脚本文件的文件扩展名为 .nsi。为了更好地阅读浏览与维护,NSIS 脚本还可以通过在头文件中存储函数或宏来分为多个文件。头文件文件扩展名叫 .nsh 然后在脚本中使用 !include 命令以集成头文件内容。

行注释以分号“;”开头,并在行尾结束。所有命令也在行尾结束。如果一个命令需要跨多行,必须在行尾添加一个反斜杠“\”。

Hello World!

我们创建的第一个“安装程序”脚本是著名的“Hello World”示例。为此,必须在文本编辑器中输入以下文本:

Name "Hello World"
OutFile "helloworld.exe"
Section "Hello World"
MessageBox MB_OK "Hello World!"
SectionEnd

该文本现在保存在文件名“helloworld.nsi”下。然后就可以启动编译器了。直接拖进编译器(如果没有 HM NIS Edit)或通过命令行运行下面的命令:

makensis              "Hello World.nsi"

如果脚本能够编译且没有错误,则应该在脚本文件夹中创建一个名为“helloworld.exe”的可执行文件。启动此应用程序后,会出现一个安装程序窗口,上面会出现一个消息框,消息框内包含文本“Hello World!”

 

 NSIS HelloWorld 安装程序 

使用命令说明: 

Name  

设置安装程序的名称。通常,它与应用程序的名称相对应,例如“MyApp”。如果名称包含一个或多个“&”,则必须在第二个参数中指定带有双重“&”的名称,例如: 

 Name "Foo & Bar" "Foo && Bar"

OutFile 

设置输出文件的名称。还可以包含路径,例如: 

OutFile "C:\Temp\MyApp.exe"

Section 

开始一个新区段。区段也可以是隐藏的、可选的或用于卸载程序。该区段由 SectionEnd 指令关闭。 

MessageBox 

显示带有指定选项(“显示确定按钮”)和指定文本的消息窗口 

第一个“真正的”安装程序 

要真正将某些内容写入硬盘并不需要太多步骤: 

Name "First Installer"
OutFile "Myapp.exe"
InstallDir $PROGRAMFILES\Myapp
Page directory
Page instfiles
Section ""
SetOutPath $INSTDIR
File C:\Windows\system32\notepad.exe
SectionEnd

我们已经从 HelloWorld 安装程序中了解了 Name 和 OutFile 。InstallDir 设置默认安装路径。使用常量 $PROGRAMFILES 将指向系统已配置的程序文件夹。使用命令 Page 指定安装程序中要显示的页面。在这种情况下,首先显示安装目录查询与设置对话框。

然后是实际的安装对话框,后面将在其中复制文件。 在 Section 内部,使用 SetOutPath 确定并创建安装文件夹。使用File指定要提取到安装文件夹中的文件。 

展望 

 在后面的第二部分教程中,我们将使我们的安装程序也能够卸载程序。此外,我们还将查看一些其他页面,并为用户提供选择安装特定部分的选项。

预计以后在第三部分中,我们将为安装程序配备 ModernUI,使其具有更现代的外观。

相关文章:

  • mybatis框架相关问题总结(本地笔记搬运)
  • 这家民营银行起诉担保公司?暴露担保增信兜底隐患
  • 波兰出局奥地利无限可能,荷法无谓争小组第一,谁能小组第一?
  • 帕金森患者饮食指南:科学调养,呵护健康
  • 一般人不要学Python?一般人怎么学Python!!
  • Android studio在Ubuntu桌面上 创建桌面图标,以及导航栏图标
  • “论数据访问层设计技术及其应用”必过范文,软考高级,系统架构设计师论文
  • 【Pmac】PMAC QT联合开发中各种可能遇到的坑
  • C++之提高篇
  • 【数据结构】链表的大概认识及单链表的实现
  • 考前刷题练手感(北航期末往年数据结构编程题)
  • 【数据结构】线性表之《栈》超详细实现
  • 【八股系列】介绍React高阶组件,适用于什么场景?
  • 毕业季带给我的五个启示
  • 如何清除anaconda3缓存?
  • @jsonView过滤属性
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • [译]前端离线指南(上)
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 03Go 类型总结
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Docker入门(二) - Dockerfile
  • JAVA_NIO系列——Channel和Buffer详解
  • Java的Interrupt与线程中断
  • Python - 闭包Closure
  • Python实现BT种子转化为磁力链接【实战】
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Twitter赢在开放,三年创造奇迹
  • WebSocket使用
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 如何在GitHub上创建个人博客
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 我这样减少了26.5M Java内存!
  • 原生js练习题---第五课
  • 源码安装memcached和php memcache扩展
  • 再谈express与koa的对比
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • ​香农与信息论三大定律
  • # centos7下FFmpeg环境部署记录
  • (function(){})()的分步解析
  • (SpringBoot)第七章:SpringBoot日志文件
  • (纯JS)图片裁剪
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (独孤九剑)--文件系统
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (六)vue-router+UI组件库
  • (七)Java对象在Hibernate持久化层的状态
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (推荐)叮当——中文语音对话机器人