nsis用于打包window环境安装、卸载程序,免费开源软件(不管你用于任何用途)。

window环境打包是做什么?

也许你见过有的程序,copy个文件夹(或者文件),点击扩展名是.exe的文件就可以运行,不用安装呢。这就是没有打包的程序。有安装过程的程序就是打包过的。

那打包什么好处呢?

1.压缩一个文件夹有什么好处,打包也有。

2.压缩包中有很多文件资源,对这个软件也许你就要普通的功能,也许你需要高级功能,也许你要定制的功能,这些功能需要一些特定的文件资源支撑,其他的文件对你的需要没有帮助,不需要放那里浪费空间。总结来说就是选择你需要的组件,安装(copy)到你指定的目录。

3.安装过程可以设置开机启动,桌面快捷方式,设置环境变。。。。。。

4.卸载过程可以删除安装目录所有文件,安装写入的一些东西,还有打开网页,让你反馈意见。。。。。。

那就一起来学习nsis吧

nsis执行你写的nsi脚本,对安装卸载过程进行控制。

那就从nsi脚本学习开始。

首先,工欲善其事必先利其器。

NSIS 3.0.1 正式版汉化增强版
链接: https://pan.baidu.com/s/1nuQ58vR 密码: krpp

下载后无需解压,解压后杀毒软件会干掉里面的文件(我就遇到过)。打开后直接选择里面对应的工具文件即可。里面还有教程,可以先浏览下,了解nsi脚本结构,特点。

开始第一个nsi脚本HelloWorld.nsi吧。

打包window环境的应用程序,window环境的应用程序你有吗?没有的话我用c写了一个demo(懂C的都知道,就一行代码,调用window的计算器),

链接:  密码:

也可以自己去编译或者自己电脑上的exe可执行文件

#include <afxres.h>

void main(){

//    ShellExecuteA(0,"open", "calc", 0, 0, 3);

system("calc");
}

编译环境不一样的话头文件不一样,vs头文件引用Windows.h

下载后单击就可以运行,这样就有了打包的对象。

接下来编辑nsi脚本。

; 安装程序初始定义常量

!define PRODUCT_NAME "HelloWorld"

!define PRODUCT_VERSION "1.01"

!define PRODUCT_PUBLISHER "大彬出版社"

!define PRODUCT_WEB_SITE"http://www.jiayun.club"

!define PRODUCT_DIR_REGKEY"Software\Microsoft\Windows\CurrentVersion\App Paths\计算器.exe"

!define PRODUCT_UNINST_KEY"Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"

!define PRODUCT_UNINST_ROOT_KEY"HKLM"

SetCompressor lzma

; ------ MUI 现代界面定义 (1.67 版本以上兼容)------

!include "MUI.nsh"

; MUI 预定义常量

!define MUI_ABORTWARNING

!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"

!define MUI_UNICON"${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"

; 欢迎页面

!insertmacro MUI_PAGE_WELCOME

; 许可协议页面

;!insertmacro MUI_PAGE_LICENSE"..\..\..\..\path\to\licence\YourSoftwareLicence.txt"

; 安装目录选择页面

!insertmacro MUI_PAGE_DIRECTORY

; 安装过程页面

!insertmacro MUI_PAGE_INSTFILES

; 安装完成页面

!define MUI_FINISHPAGE_RUN "$INSTDIR\计算器.exe"

!insertmacro MUI_PAGE_FINISH

; 安装卸载过程页面

!insertmacro MUI_UNPAGE_INSTFILES

; 安装界面包含的语言设置

!insertmacro MUI_LANGUAGE"SimpChinese"

; 安装预释放文件

!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS

; ------ MUI 现代界面定义结束 ------

Name "${PRODUCT_NAME}${PRODUCT_VERSION}"

OutFile "Setup.exe"

InstallDir "$PROGRAMFILES\HelloWorld安装目录"

InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}""UninstallString"

ShowInstDetails show

ShowUnInstDetails show

Section "MainSection" SEC01

SetOutPath "$INSTDIR"

SetOverwrite ifnewer

; 此处是你的可执行文件位置

File "计算器.exe"

CreateDirectory "$SMPROGRAMS\My application"

CreateShortCut "$SMPROGRAMS\My application\My application.lnk""$INSTDIR\计算器.exe"

CreateShortCut "$DESKTOP\My application.lnk" "$INSTDIR\计算器.exe"

SectionEnd

Section -AdditionalIcons

WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url""InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"

CreateShortCut "$SMPROGRAMS\My application\Website.lnk""$INSTDIR\${PRODUCT_NAME}.url"

CreateShortCut "$SMPROGRAMS\My application\Uninstall.lnk""$INSTDIR\uninst.exe"

SectionEnd

Section -Post

WriteUninstaller "$INSTDIR\uninst.exe"

WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" """$INSTDIR\计算器.exe"

WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""DisplayName" "$(^Name)"

WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""UninstallString" "$INSTDIR\uninst.exe"

WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""DisplayIcon" "$INSTDIR\计算器.exe"

WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""DisplayVersion" "${PRODUCT_VERSION}"

WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""URLInfoAbout" "${PRODUCT_WEB_SITE}"

WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""Publisher" "${PRODUCT_PUBLISHER}"

SectionEnd

/******************************

*  以下是安装程序的卸载部分  *

******************************/

Section Uninstall

Delete "$INSTDIR\${PRODUCT_NAME}.url"

Delete "$INSTDIR\uninst.exe"

Delete "$INSTDIR\计算器.exe"

Delete "$SMPROGRAMS\My application\Uninstall.lnk"

Delete "$SMPROGRAMS\My application\Website.lnk"

Delete "$DESKTOP\My application.lnk"

Delete "$SMPROGRAMS\My application\My application.lnk"

RMDir "$SMPROGRAMS\My application"

RMDir "$INSTDIR"

DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY}"${PRODUCT_UNINST_KEY}"

DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"

SetAutoClose true

SectionEnd

#-- 根据 NSIS 脚本编辑规则,所有Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#

# 确认下载界面

Function un.onInit

MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除$(^Name) ,及其所有的组件?" IDYES +2

Abort

FunctionEnd

# 卸载完成后的界面

Function un.onUninstSuccess

HideWindow

MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。"

FunctionEnd

把脚本文件保存到HelloWorld.nsi中

执行脚本,生成打包后的文件

可以测试我们的第一个windows环境安装包文件了

nsi学习之HelloWorld相关推荐

  1. jQuery学习笔记--Helloworld

    刚学习jQuery,觉得有的东西确实有必要写下来,加深下记忆,本文纯属给自己写的,希望大家不要见笑 jQuery是什么? jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多j ...

  2. Salesforce LWC学习(二) helloWorld程序在VSCode中的实现

    上一篇我们简单的描述了一下Salesforce DX的配置以及CLI的简单功能使用,此篇主要简单描述一下LWC如何实现helloWorld以及LWC开发时应该注意的一些规范. 做国内项目的同学直观的感 ...

  3. 1.ROS编程学习:helloworld的c++与python实现

    目录 一.c++实现 1.创建工作空间 3.CMakeLists.txt配置 4.catkin_make编译 5.source一下,配置环境变量 6.roscore+rosrun 二.python实现 ...

  4. CXF学习(2) helloworld

    0.新建一个项目取名wsserver. pom.xml 文件如下 <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...

  5. SpringMVC学习笔记——HelloWorld

    一.预备工作 创建Maven webapp工程. 使用Maven配置了需要使用的Jar包,Spring基于4.0.0版本. pom.xml如下: <project xmlns="htt ...

  6. nsi学习之 重复安装给于提示覆盖 不可以重复安装

    如果安装过改软件给于用户一个提示  是否退出 ;定义一个常量 !define HKCU_PATH "Software\Helloworld" Function .onInit  ; ...

  7. nsi学习之 软件重复安装不可以改路径

    !include "LogicLib.nsh" ; 安装程序初始定义常量 !define PRODUCT_NAME "HelloWorld" !define P ...

  8. 深度学习之Helloworld

    文章转载自:https://blog.csdn.net/gdmj77zzh/article/details/75674463 ①前言 一.传统机器学习的回顾 人工智能是一个非常大的概念,而机器学习只是 ...

  9. lua学习笔记-HelloWorld

    2019独角兽企业重金招聘Python工程师标准>>> 运行lua脚本,lua hello.lua/dofile("hello.lua") print(" ...

最新文章

  1. Windows 无法启动 NVIDIA Display Container LS 服务
  2. python显示无效语法怎么处理-Python不支持 i ++ 语法的原因解析
  3. Hibernate 一对多的联系(Set关联) 对象关系映射
  4. SPS2003升级MOSS2007时SSO部件错误解决
  5. win2003主/辅DNS服务器详细配置
  6. 华为杨超斌:5G方面领先同行至少12个月到18个月
  7. java建立线性表的链式结构,数据结构学习----线性表的链式表示(Java实现)
  8. 授权(Authentication)
  9. Linux IPC POSIX 共享内存
  10. 批量激活管理工具VAMT 3.0的安装与基本使用方法简介
  11. 修改Android中的文件权限
  12. objective-c和java哪个简单_Objective-C和Java的简单对比
  13. 解决屏蔽JS代码报错的问题
  14. 挑战:工资计算器读写数据文件
  15. C# 自定义电脑屏幕保护程序
  16. logo下方显示技术支持信息_用“技术支持信息”显示的OEM信息备份修改方法
  17. 将多个html文件合成一个,【答疑】怎么用pr将多个项目工程文件合成一个? - 视频教程线上学...
  18. 速途在线沙龙11期:王通夫唯首次聚首共话SEO
  19. 一炉真香起静中开鸿蒙翻译,【真 香】_古籍全文检索_诗词名句网
  20. IMU(LPMS-B2)分析随机误差

热门文章

  1. [Delphi]将一个窗体Form1嵌入另一个窗体Form2
  2. 华为MPLSVPN与GRE隧道配置练习
  3. 故障转移群集(MSCS)搭建部署-图文详解
  4. matlab制作打地鼠游戏,Python制作打地鼠小游戏
  5. SKAdNetwork 的限制 – 优缺点与移动跟踪 MMP
  6. 写文章、改句子、文章生成、AI生成器网址汇总
  7. 一个简单的双骰子游戏
  8. Xilisoft Video Editor(视频编辑软件)v2.2永久版
  9. 编译原理-正则文法与正则表达式的相互转化
  10. 对整个图像进行透视变换