NSIS打包

以下是一篇详细的 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"```

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容