Please enable Javascript to view the contents

NSIS: 常见问题记录

 ·  ☕ 2 分钟

NSIS脚本结构

  • defines

    • COMPANY_NAME、COMPANY_WEB_SITE、PRODUCT_PUBLISHER、PRODUCT_WEB_SITE、PRODUCT_NAME、PRODUCT_VERSION等
  • MUI

    • MUI_ABORTWARNING、MUI_ICON、MUI_PAGE_WELCOME、MUI_PAGE_LICENSE、MUI_PAGE_DIRECTORY、MUI_PAGE_INSTFILES、MUI_PAGE_FINISH
  • Section

    • 00 - 0x: 常规安装任务
    • -Post: 安装后,执行的必要任务(写注册表、创建快捷方式、开始菜单)
    • Uninstall: 定义卸载过程

Function .onInit: 安装前的必要动作(读取系统语言设置,判断MUI语言显示)
Function un.onInit: 卸载前的必要动作(是否保留用户数据)

Function un.onUninstSuccess: 卸载成功处理函数

问题

NSIS日志记录

  1. 官网下载开启log功能的NSIS程序

如何让NSIS支持多语言

  • 多语言
  • 多语言License

如何让安装界面的提示语、License能根据系统语言设置进行显示?

分解为以下三个子问题:

  1. NSIS脚本获取系统语言设置
  2. 多语言、多语言License
  3. 根据语言,选择语言、产品名称、license等

示例脚本如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
; Script generated by the HM NIS Edit Script Wizard.

; HM NIS Edit Wizard helper defines


; MUI其他设置,必须在语言设置之前(因为多语言设置,依赖于MUI的结构来正确显示不同语言的文本)

; 许可协议页面
!define MUI_LICENSEPAGE_CHECKBOXs
!insertmacro MUI_PAGE_LICENSE $(MUILicense)

; MUI end ------

; 多语言设置,简体中文 英文
!insertmacro MUI_LANGUAGE "SimpChinese"
!insertmacro MUI_LANGUAGE "English"

; License多语言设置
; 分别根据中文license文件、英文license文件生成 MUILicense
LicenseLangString MUILicense ${LANG_ENGLISH}     "${BASE_DIR}\resource\license_en.txt"
LicenseLangString MUILicense ${LANG_SIMPCHINESE} "${BASE_DIR}\resource\license_zh.txt"

; 设置相应语言的提示信息,公司名、软件名、卸载提示、覆盖安装提示
LangString Company ${LANG_ENGLISH} "某某 公司"
LangString Software ${LANG_ENGLISH} "某某 软件"
LangString UninstallSuccess ${LANG_ENGLISH} " was successfully removed from your computer."
LangString Overwrite ${LANG_ENGLISH} "It is detected that you have installed other versions of XXX software. Do you want to overwrite the installation? "
LangString Company ${LANG_SIMPCHINESE} "xxx company"
LangString Software ${LANG_SIMPCHINESE} "xxx software"
LangString UninstallSuccess ${LANG_SIMPCHINESE} "已成功地从你的计算机移除。 "
LangString Overwrite ${LANG_SIMPCHINESE} "检测到您已安装了其它版本的某某软件,是否覆盖安装? "


Name "$(Software) $(PRODUCT_VERSION)"
; exe生成目录
OutFile "$(OUTPUT_DIR)\xx.exe"
; 默认安装目录
InstallDir "$PROGRAMFILES64\{{ .exedir }}"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
;显示安装与卸载细节
ShowInstDetails show
ShowUnInstDetails show
; 安装程序 需要管理员执行权限
RequestExecutionLevel admin


Function .onInit
    ; 获取系统默认语言
    System::Call 'kernel32::GetUserDefaultUILanguage() i.r0'

    StrCpy $LANGUAGE "$0"
    ${If} $LANGUAGE == "2052"
        StrCpy $LANGUAGE "$0"
    ${Else}
        StrCpy $LANGUAGE 1033
    ${EndIf}
FunctionEnd
分享

Hex
作者
Hex
CloudNative Developer

目录