目前手头的项目都是基于linux环境下搭建的开发框架,使用docker工具分别生成不同环境下的运行程序,现在需要将生成的运行程序文件自动构建打包生成对应操作系统环境下的安装包程序,这里介绍的是linux下打包生成windows安装包,linux版本是ubuntu22.04,使用的打包工具是NSIS
本章内容
- 安装NSIS工具
- 了解NSIS工具以及NSIS脚本
- 编写NSIS脚本
- 利用shell脚本自动输出生成NSIS脚本
1.安装NSIS工具
在命令行直接执行下载命令即可(这里是ubuntu系统,centos自己改成yum安装)
sudo apt-get install nsis
2.了解NSIS工具以及NSIS脚本
NSIS(Nullsoft Scriptable Install System)是一个开源的Windows系统下安装程序制作工具,由Nullsoft开发,该公司也是Winamp媒体播放器的创建者。NSIS的主要功能包括脚本化安装程序的创建,小巧且高度可定制,支持插件,并且是免费和开源的。
NSIS的主要特点是它使用自定义的脚本语言来描述安装程序的行为和界面,这使得开发人员可以根据他们的需求自定义安装过程。此外,NSIS生成的安装程序通常非常小巧,只包含必需的文件和组件,而且它提供了丰富的自定义选项,使开发人员能够创建符合其应用程序需求的安装界面。
NSIS脚本是一种有特定语法规则的规范语言,可以使用任何文本编辑器进行编辑,推荐使用带有行号和语法高亮的编辑器,这样更易于阅读和更新脚本。一个NSIS脚本通常包括Installer Attributes、Page、Sections和Functions等部分,其中OutFile指令是必备的,用于指明安装程序的输出文件。
通过编写NSIS脚本,开发人员可以控制安装程序的各个方面,如安装选项、文件复制、注册表操作等。同时,NSIS还支持插件,这意味着开发人员可以扩展其功能,如添加创建桌面快捷方式、注册文件关联等。
3.编写NSIS脚本
这里不深入教学,有感兴趣的或者不理解的可以搜索NSIS脚本编写的相关文章深入了解学习
下面看一个nsis脚本示例
; 示例NSIS脚本
; 包含MUI宏文件
!include "MUI2.nsh"
; 设置输出文件
Outfile "MyAppSetup.exe"
; 设置安装程序图标(可选)
; Icon "path\to\your\icon.ico"
; 设置安装程序名称
Name "MyApp_Installer"
; 设置安装程序版本信息
VIProductVersion "1.0.0.0"
VIAddVersionKey "ProductName" "MyApp"
VIAddVersionKey "FileDescription" "MyApp Installer"
VIAddVersionKey "FileVersion" "1.0.0.0"
VIAddVersionKey "LegalCopyright" "Your Company Name"
; 请求管理员权限运行
RequestExecutionLevel admin
; 设置默认安装目录
InstallDir "$PROGRAMFILES\MyApp"
; 页面设置
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
; 语言设置
;!insertmacro MUI_LANGUAGE "English"
; 安装程序段
Section "Main Program" SecMain
; 设置该段的描述
SectionIn RO
; 在这里添加你的安装逻辑
; 例如,复制文件到安装目录
SetOutPath $INSTDIR
File "/home/leo/Debug/TestNSIS.exe"
File "/home/leo/Debug/TestNSIS.ilk"
File "/home/leo/Debug/TestNSIS.pdb"
File "/home/leo/Debug/readme.txt"
; 创建快捷方式(可选)
; CreateShortCut "$DESKTOP\MyApp.lnk" "$INSTDIR\file.exe"
CreateShortCut "$DESKTOP\MyApp.lnk" "$INSTDIR\TestNSIS.exe" "" "$INSTDIR\TestNSIS.exe" 0 SW_SHOWNORMAL
; 写入卸载信息到注册表(如果需要的话)
; WriteRegStr HKLM "Software\YourCompany\MyApp" "UninstallString" '"$INSTDIR\uninst.exe"'
SectionEnd
; 卸载程序段
Section "Uninstall"
; 设置该段的描述
SectionIn RO
; 在这里添加你的卸载逻辑
; 例如,删除文件和目录
Delete "$INSTDIR\TestNSIS.exe"
; 删除快捷方式(如果创建了的话)
; Delete "$DESKTOP\MyApp.lnk"
; 从注册表中删除卸载信息(如果写入了的话)