以下是一篇详细的 NSIS 打包 EXE 的入门教程:
NSIS 打包 EXE 入门教程
NSIS(Nullsoft Scriptable Install System)是一款开源的 Windows 安装包制作工具,支持脚本化定制安装流程。本教程将带你从零开始,创建一个简单的 EXE 安装程序。
1. 环境准备
1.1 下载 NSIS
访问官网:NSIS 下载页面
下载并安装最新版本(建议选择 NSIS + HM NIS Edit 编辑器的组合包)。
1.2 安装后验证
安装完成后,桌面会生成两个图标:
NSIS:主程序(命令行工具)
HM NIS Edit:可视化脚本编辑器(推荐新手使用)
2. 创建第一个安装包
2.1 准备文件
假设你要打包以下文件:
MyApp/
├─ MyApp.exe # 主程序
├─ readme.txt # 说明文件
└─ data/ # 资源文件夹
└─ config.ini
2.2 编写 NSIS 脚本
打开 HM NIS Edit,新建一个脚本(File → New Script)。
输入以下基础脚本:
; -------------------------------
; 基础配置
; -------------------------------
!define APP_NAME "MyApp"
!define APP_VERSION "1.0"
!define PUBLISHER "Your Company"
!define OUTPUT_FILE "MyApp_Installer.exe"
; 设置压缩方式(推荐使用 LZMA)
SetCompressor LZMA
; -------------------------------
; 安装程序属性
; -------------------------------
OutFile "${OUTPUT_FILE}" ; 生成的安装包名称
Name "${APP_NAME}" ; 安装程序名称
Caption "${APP_NAME} v${APP_VERSION}" ; 窗口标题
VIProductVersion "${APP_VERSION}.0" ; 版本号(格式 X.X.X.X)
VIFileVersion "${APP_VERSION}.0"
VIAddVersionKey "ProductName" "${APP_NAME}"
VIAddVersionKey "FileVersion" "${APP_VERSION}"
VIAddVersionKey "CompanyName" "${PUBLISHER}"
; -------------------------------
; 安装界面设置
; -------------------------------
InstallDir "$PROGRAMFILES${APP_NAME}" ; 默认安装路径
RequestExecutionLevel admin ; 需要管理员权限
; -------------------------------
; 安装内容(文件复制)
; -------------------------------
Section "主程序" Section_Main
SetOutPath "$INSTDIR" ; 设置目标路径
; 添加文件到安装包
File "MyAppMyApp.exe"
File "MyApp
eadme.txt"
; 添加整个文件夹
SetOutPath "$INSTDIRdata"
File /r "MyAppdata*.*"
; 创建快捷方式
CreateShortcut "$DESKTOP${APP_NAME}.lnk" "$INSTDIRMyApp.exe"
SectionEnd
; -------------------------------
; 卸载程序
; -------------------------------
Section "Uninstall"
; 删除安装文件
Delete "$INSTDIRMyApp.exe"
Delete "$INSTDIR
eadme.txt"
RMDir /r "$INSTDIRdata"
RMDir "$INSTDIR"
; 删除快捷方式
Delete "$DESKTOP${APP_NAME}.lnk"
; 删除注册表信息(可选)
DeleteRegKey HKCU "Software${APP_NAME}"
SectionEnd
2.3 编译脚本生成安装包
保存脚本为 MyApp.nsi。
右键点击脚本文件 → 选择 Compile NSIS Script。
编译成功后,会在脚本目录生成 MyApp_Installer.exe。
3. 脚本详解
3.1 核心指令
OutFile:生成的安装包文件名。
InstallDir:默认安装路径(如 $PROGRAMFILES 是系统程序文件夹)。
Section:定义安装内容(每个 Section 对应一个安装步骤)。
File:添加文件到安装包(支持通配符 *.* 和递归 /r)。
CreateShortcut:创建桌面快捷方式。
3.2 高级功能(可选)
注册表操作:
WriteRegStr HKCU "Software${APP_NAME}" "InstallPath" "$INSTDIR"
用户界面自定义:
!include "MUI2.nsh" ; 引入现代界面库
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "SimpChinese" ; 设置中文界面
条件判断:
IfFileExists "$INSTDIR*.*" 0 +2
MessageBox MB_OK "检测到已安装旧版本!"
4. 使用 HM NIS Edit 可视化工具
打开 HM NIS Edit,选择 Tools → Generate NSIS Script。
通过向导配置:
设置安装包名称、版本。
添加文件/文件夹。
选择是否创建快捷方式、注册表项。
生成脚本后进一步修改。
5. 常见问题
5.1 安装包体积过大?
使用 SetCompressor LZMA 压缩算法(默认已启用)。
删除不必要的文件。
5.2 如何静默安装?
在命令行中运行安装包时添加参数:
MyApp_Installer.exe /S
5.3 如何添加卸载程序?
在安装脚本中添加:
WriteUninstaller "$INSTDIRUninstall.exe"
6. 总结
通过本教程,你已经学会:
使用 NSIS 创建基础安装包。
添加文件、快捷方式和卸载程序。
自定义安装路径和界面。
进阶学习可参考:
NSIS 官方文档
NSIS 中文手册
模板:
打包脚本NSIS脚本和setup目录在同一个目录,需要被打包的安装文件在setup目录下,打包所有的setup目录下的文件:
; -------------------------------
; 基础配置
; -------------------------------
!include "FileFunc.nsh"
!include "MUI2.nsh"
; 动态获取脚本所在目录路径(父目录)
!system 'for %I in (.) do echo !define PARENT_DIR "%I" > _temp.nsh'
!include '_temp.nsh'
!delfile '_temp.nsh'
Name "推烟器"
OutFile "cigarette_pusher.exe" ; 生成的安装程序名
InstallDir "$PROGRAMFILEScigarette"
RequestExecutionLevel user
; -------------------------------
; 现代界面配置
; -------------------------------
!define MUI_WELCOMEPAGE_TITLE "欢迎安装 数码管推烟器"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "SimpChinese"
Section "main"
SetOutPath $INSTDIR
; 打包setup目录下所有内容(保留子目录结构)
File /r "${PARENT_DIR}setup*.*"
; 创建快捷方式(假设主程序在setup根目录)
CreateShortcut "$DESKTOPcigarette_pusher.lnk" "$INSTDIRcigarette_pusher.exe"
SectionEnd
; -------------------------------
; 卸载程序(彻底清理)
; -------------------------------
Section "Uninstall"
RMDir /r "$INSTDIR"
; 清理快捷方式
Delete "$DESKTOPcigarette_pusher.lnk"
Delete "$SMPROGRAMScigarette_pusher.lnk"
DeleteRegKey HKCU "Softwarecigarette_pusher"
SectionEnd
VIProductVersion "0.1.0.0"
VIAddVersionKey "ProductName" "cigarette_pusher"
VIAddVersionKey "FileVersion" "0.1.0.0"
VIAddVersionKey "CompanyName" "MyCompany"
VIAddVersionKey "LegalCopyright" "© 2024 MyCompany"```



















暂无评论内容