nsi学习之HelloWorld
来源:互联网 发布:宋仲基五官知乎 编辑:程序博客网 时间:2024/05/16 02:48
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
- nsi学习之 软件重复安装不可以改路径
- nsi学习之 重复安装给于提示覆盖 不可以重复安装
- Activiti5学习之【HelloWorld】
- c++ 学习 之 HelloWorld
- extJS学习之helloworld
- Hibernate 学习之HelloWorld
- ExtJS学习之HelloWorld
- Ajax学习之helloworld
- NDK学习之helloworld
- Python学习之-HelloWorld
- Nodejs(学习之HelloWorld)
- struts2学习之HelloWorld
- kotlin 学习之 HelloWorld
- Android学习之HelloWorld
- struts学习之HelloWorld
- java学习之HelloWorld
- libevent学习之helloworld
- Docker管理工具Web UI:DockerUI & Shipyard
- java开源项目
- 06 类封装
- 我是一个网卡
- 发改委大力推动人工智能发展
- nsi学习之HelloWorld
- 函数指针作为某个函数的参数及定义函数指针
- 【Unity Shader入门精要】— Unity Shader基础
- mongodb字段修改 String类型的日期修改为datetime类型
- HDU-1231 最大连续子序列
- [NLP论文阅读] The Fixed-Size Ordinally-Forgetting Encoding Method for Neural Network Language Models
- [Lintcode] #97 二叉树的最大深度
- WebRTC
- Angularjs自定义服务~使用Module的factory方法