NSIS 入门教程 (一)

news2025/2/8 11:18:39

 介绍

大多数应用程序都附带一个安装程序,它将所需的文件复制到正确的文件夹中,创建注册表项,并提供卸载例程以(希望)从计算机中彻底删除应用程序. 有多种解决方案可以为自主开发的应用程序配备安装程序。除了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,使其具有更现代的外观。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1850769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

服务器安装JDK,Maven等常用环境

生产环境部署服务器需要安装一些常用工具,下面我就把常用的jdk,maven,node,git的安装方法和步骤演示 一、安装JDK环境 执行如下命令,安装JDK,所有命令都是 复制,粘贴,回车 yum install -y jav…

Apple - Secure Coding Guide

本文翻译整理自:Secure Coding Guide https://developer.apple.com/library/archive/documentation/Security/Conceptual/SecureCodingGuide/Introduction.html#//apple_ref/doc/uid/TP40002477-SW1 文章目录 一、安全编码指南简介1、概览黑客和攻击者没有平台是免疫…

并行计算之SIMD与SPMD

SIMD (Single Instruction Multiple Data) SIMD,也就是单指令多数据计算,一条指令可以处理多个数据。通过向量寄存器存储多个数据元素,并使用单条指令同时对这些数据元素进行处理,从而提高了计算效率。 代码示例: fl…

【数据结构】顺序表实操——通讯录项目

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

对比学习

对比学习基本概念 对比学习通过对比数据对的“相似”或“不同”以获取数据的高阶信息。 由同一张原始图片扩增而来的两张新的图片,叫做Positive Pairs。将这两张图片送入深度学习模型中,我们希望深度学习模型学习到这两个图像是相似的。 由不同原始图…

【尚庭公寓SpringBoot + Vue 项目实战】移动端找房功能(二十一)

【尚庭公寓SpringBoot Vue 项目实战】移动端找房功能(二十一) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】移动端找房功能(二十一)1、业务介绍2、接口开发2.1、地区信息2.2、获取全部支付方式列表2.3、房间信息2.2.1. 根据条…

SpringCloud中Eureka和Nacos的区别和各自的优点

Eureka注册中心 Eureka作为一个注册中心,服务提供者把服务注册到注册中心,服务消费者去注册中心拉取信息, 然后通过负载均衡得到对应的服务器去访问。 服务提供者每隔30s向注册中心发送请求,报告自己的状态,当超过一定…

【网络安全的神秘世界】关于Linux中一些好玩的字符游戏

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 佛祖保佑 把 motd 通过xtp拖到Linux中 liyangUbuntu2204:~$ cp motd /etc/motd #一定要放在etc下 liyangUbuntu2204:~$ exi…

windows设置开机启动项

将文件放到下面路径即可实现每次开机启动 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

数据分析-相关性

0、提高数据样本质量 首先是确保数据采集的准确性与可靠性,也就是如何降低数据误差 系统误差是由测量工具不精确和测量方法选择不当造成的。这类误差我们可以通过校准工具或者选择更合适的测量方法来消除;随机误差是由环境因素等外部不可控原因导致的&…

RStudio Desktop 安装

RStudio 下载 macOS 安装 RStudio Desktop 打开报错 R not found Could not locate an R installation on the system.安装R https://cloud.r-project.org/bin/macosx/安装 R-4.4.1-arm64.pkg 成功打开 参考 RStudio 桌面版安装R

React的Redux的状态管理

步骤 1.创建新项目 npx create-react-app react-redux 2.安装配套工具 npm i reduxjs/toolkit react-redux 3.启动项目 npm run start 4.在src目录下创建store文件夹 5.在store文件夹下创建modules文件夹 6.在store文件夹里创建index.js文件 7.在counterStore.js文件…

Redis的实战常用一、验证码登录(解决session共享问题)(思路、意识)

一、基于session实现登录功能 第一步:发送验证码: 用户在提交手机号后,会校验手机号是否合法: 如果不合法,则要求用户重新输入手机号如果手机号合法,后台此时生成对应的验证码,同时将验证码进行…

Vue81-独享路由守卫

一、 独享路由守卫的定义 当只有某个特定的路由需要做校验的时候,可以在改路由组件规则的地方单独配置独属于改组件的路由守卫。 二、示例 1、需求 系统只在进入新闻路由页面的时候做校验。 2、代码实现 注意: 独享路由守卫,只有前置路由守…

C语言入门系列:数据类型转换

文章目录 一,自动类型转换1,赋值运算1.1,浮点数赋值给整型变量-不安全1.2,整数赋值给浮点数变量-安全1.3,窄类型赋值给宽类型-安全1.4,宽类型赋值给窄类型-不安全 2,混合类型的运算2.1&#xff…

Kotlin 中的内联函数

1 inline 内联函数:消除 Lambda 带来的运行时开销。 举例来说: fun main() {val num1 100val num2 80val result num1AndNum2(num1, num2) { n1, n2 ->n1 n2} }fun num1AndNum2(num1: Int, num2: Int, operation: (Int, Int) -> Int): Int …

【自撰写】【国际象棋入门】第8课 国际象棋残局基础

第8课 国际象棋残局基础 一、残局的特点 残局是棋局的最后(收尾)阶段,虽然此时棋盘上的子力已经所剩无几,但依照不同的局面分类,残局中存在着许多有意思的变化,初始局面中的细小变化也可能引发到截然不同…

Redis源码学习:ziplist的数据结构和连锁更新问题

ziplist ziplist 是 Redis 中一种紧凑型的列表结构&#xff0c;专门用来存储元素数量少且每个元素较小的数据。它是一个双端链表&#xff0c; 可以在任意一端进行压入/弹出操作&#xff0c;并且该操作的时间复杂度为O(1)。 ziplist数据结构 <zlbytes><zltail>&l…

期货交易豆粕品种详细分析

文章目录 1、豆粕期货标准&#xff08;2024年6月22号数据&#xff09;2、豆粕是什么3、豆粕1、5、9合约区别4、影响豆粕的价格因素1、大豆的供应情况。2、豆粕的季节性3、油粕比&#xff08;豆油和豆粕的价格关系 &#xff09; 5、美国大豆的生产/库存炒作6、豆粕双方&#xff…

Linux中tar压缩与解压缩

TAR是Unix/Linux中常用的归档工具&#xff0c;它可以对文件或目录进行打包但不压缩&#xff0c;或者配合其他工具进行压缩。 压缩文件或目录 以下是一些基本的tar压缩命令&#xff1a; 1.压缩单个文件&#xff1a; tar -cvf archive.tar file1 2.压缩多个文件&#xff1a; t…