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日志记录
- 官网下载开启log功能的NSIS程序
如何让NSIS支持多语言
如何让安装界面的提示语、License能根据系统语言设置进行显示?
分解为以下三个子问题:
- NSIS脚本获取系统语言设置
- 多语言、多语言License
- 根据语言,选择语言、产品名称、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
|