NSIS 脚本

设置文件属性

; 自定义常量
!define PRODUCT_NAME "zhxlp" ; 程序名称
!define PRODUCT_VERSION "1.0.0.0"  ; 版本

; 安装程序包含的语言
!insertmacro MUI_LANGUAGE "SimpChinese"

; 设置文件属性
VIProductVersion "1.0.0.0" ; 版本号
VIAddVersionKey  /LANG=${LANG_SimpChinese} "ProductName" "${PRODUCT_NAME}" ;产品名称
VIAddVersionKey  /LANG=${LANG_SimpChinese} "Comments" "测试" ;备注
VIAddVersionKey  /LANG=${LANG_SimpChinese} "CompanyName" "zhxlp" ;公司名称
VIAddVersionKey  /LANG=${LANG_SimpChinese} "LegalCopyright" "Copyright (c) 2016-2020 zhxlp" ;版权
VIAddVersionKey  /LANG=${LANG_SimpChinese} "FileDescription" "测试" ;文件描述
VIAddVersionKey  /LANG=${LANG_SimpChinese} "FileVersion" "${PRODUCT_VERSION}" ;文件版本
VIAddVersionKey  /LANG=${LANG_SimpChinese} "ProductVersion" "${PRODUCT_VERSION}" ;产品版本

单文件可执行文件

!include  "MUI.nsh"

; 自定义常量
!define PRODUCT_NAME "zhxlp" ; 程序名称
!define PRODUCT_VERSION "1.0.0.0"  ; 版本
!define MUI_ICON icon.ico ; 程序图标

; 安装目录
InstallDir "$TEMP\zhxlp"

Name ${PRODUCT_NAME}
; 输出文件
OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}.exe"
; 静默安装
SilentInstall silent

Section MainSection
  ; 设置输出目录
  SetOutPath "$INSTDIR"
  ; 文件覆盖
  SetOverwrite on
  ; 释放文件
  File /r "file\*.*"
  ExecShell "open" "$INSTDIR\zhxlp.exe"
SectionEnd

设置卸载信息

; 自定义常量
!define PRODUCT_NAME "zhxlp" ;产品名称
!define PRODUCT_VERSION "1.0.0.0" ;版本号
!define COMPANY_NAME "zhxlp" ;公司名称
!define PRODUCT_PUBLISHER "${COMPANY_NAME}" ;发布者,在控制面板-程序和功能中显示
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\zhxlp" ; 卸载注册表存放位置
!define PRODUCT_WEB_SITE "https://www.zhxlp.com" ; 应用程序主页链接,在控制面板-程序和功能中显示


; 安装完成后,在注册表中写入卸载信息
Section -Post
    ; 软件版本
    WriteUninstaller "$INSTDIR\uninst.exe"
    ; 程序名称
    WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME}"
    ; 卸载程序路径
    WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
    ; 图标路径
    WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\uninst.exe"
    ; 程序版本
    WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
    ; 应用程序主页
    WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
    ; 发布者名称
    WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
    ; 安装内容总大小
    ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
    IntFmt $0 "0x%08X" $0
    WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "EstimatedSize" "$0"
SectionEnd
Section Uninstall
    ; 删除卸载信息注册表
    DeleteRegKey HKLM "${PRODUCT_UNINST_KEY}"
SectionEnd

界面内容设置

!include "MUI.nsh"
; 定义变量
Var MyMsgBeforeRemove ;是否卸载弹框提示内容
var Wtitle ; 欢迎界面标题
var Wtext ; 欢迎界面内容
;var Ftitle ; 完成界面标题
;var Ftext ; 完成界面内容
Var DataDir ; 数据存储目录

; MUI 预定义常量
!define MUI_ABORTWARNING ;定义停止安装警告弹窗
!define MUI_ICON "icon\zhxlp.ico"  ; 安装程序icon图标
!define MUI_WELCOMEFINISHPAGE_BITMAP "icon\install_left.bmp" ; 安装界面左侧图片
!define MUI_TEXT_WELCOME_INFO_TITLE $Wtitle ; 安装欢迎界面标题
!define MUI_TEXT_WELCOME_INFO_TEXT $Wtext ; 安装欢迎界面内容
;!define MUI_TEXT_FINISH_INFO_TITLE $Ftitle ; 安装完成界面标题
;!define MUI_TEXT_FINISH_INFO_TEXT $Ftext ; 安装完成界面内容
!define MUI_UNICON "icon\zhxlp.ico" ; 卸载程序icon图标
;!define MUI_UNWELCOMEFINISHPAGE_BITMAP "icon\install_left.bmp" ; 卸载界面左侧图片
;!define MUI_UNTEXT_WELCOME_INFO_TITLE $Wtitle ; 卸载欢迎界面标题
;!define MUI_UNTEXT_WELCOME_INFO_TEXT $Wtext ; 卸载欢迎界面内容
;!define MUI_UNTEXT_FINISH_INFO_TITLE $Ftitle ; 卸载完成界面标题
;!define MUI_UNTEXT_FINISH_INFO_TEXT $Ftext ; 卸载完成界面内容


; 定义展示界面
!insertmacro MUI_PAGE_WELCOME  ; 安装欢迎页面
;!insertmacro MUI_PAGE_DIRECTORY  ; 安装目录选择页面
!insertmacro MUI_PAGE_INSTFILES ; 安装过程页面
;!insertmacro MUI_PAGE_FINISH ; 安装完成页面
;!insertmacro MUI_UNPAGE_WELCOME ; 卸载欢迎页面
!insertmacro MUI_UNPAGE_INSTFILES ; 卸载过程页面
;!insertmacro MUI_UNPAGE_FINISH ; 卸载完成界面


; 安装程序即将完成初始化时调用
Function .onInit
    ;StrCpy $Wtitle "安装欢迎界面标题"
    ;StrCpy $Wtext "安装欢迎界面内容"
    ;StrCpy $Ftitle "安装完成界面标题"
    ;StrCpy $Ftext "安装完成界面内容"
FunctionEnd

; 卸载程序即将完成初始化时调用
Function un.onInit
    ;StrCpy $Wtitle "卸载欢迎界面标题"
    ;StrCpy $Wtext "卸载欢迎界面内容"
    ;StrCpy $Ftitle "卸载完成界面标题"
    ;StrCpy $Ftext "卸载完成界面内容"
    StrCpy $MyMsgBeforeRemove "你确实要完全卸载 ${PRODUCT_NAME} 其及所有的组件吗?"
    ; 展示是否卸载提示弹窗
    MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 $MyMsgBeforeRemove IDYES +2
    Abort   ; 立刻退出
FunctionEnd

最后更新于