需求
自助终端打包安装需要根据不同的位置设置不同的访问路径
实现
在欢迎页和许可页之间插入一个自定义页面,用于选择自助终端的位置
在成功安装后,将访问路径写入启动文件
Unicode true
; Script generated by the HM NIS Edit Script Wizard.
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "旅客服务自助终端"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "上海民航华东凯亚系统集成有限公司南京研发中心"
!define PRODUCT_WEB_SITE "http://hdcares.travelsky.cn/"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\start.cmd"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
SetCompressor lzma
!include nsDialogs.nsh
!include LogicLib.nsh
; MUI 1.67 compatible ------
!include "MUI.nsh"
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "fids.ico"
!define MUI_UNICON "fids.ico"
; Language Selection Dialog Settings
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
Var Dialog
Var radioDep
Var radioArr
Var selectedPos
; Welcome page
!insertmacro MUI_PAGE_WELCOME
Page custom nsDialogsPage nsDialogsPageLeave
Function nsDialogsPage
!insertmacro MUI_HEADER_TEXT_PAGE "位置选择" "选择自助终端所在位置,默认为出发层"
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateRadioButton} 30% 30% 100% 20% "出发层"
Pop $radioDep
${NSD_CreateRadioButton} 30% 45% 100% 25% "到达层"
Pop $radioArr
${NSD_SetState} $radioDep ${BST_CHECKED}
nsDialogs::Show
FunctionEnd
Function nsDialogsPageLeave
${NSD_GetState} $radioDep $0
StrCpy $selectedPos $0
FunctionEnd
; License page
!insertmacro MUI_PAGE_LICENSE "license.txt"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!insertmacro MUI_PAGE_FINISH
; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "SimpChinese"
; Reserve files
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "FidsInstaller.exe"
InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
var depUrl
var arrUrl
Function .onInstSuccess
ReadINIStr $0 $INSTDIR\addr.ini address dep
ReadINIStr $1 $INSTDIR\addr.ini address arr
StrCpy $depUrl $0
StrCpy $arrUrl $1
ClearErrors
FileOpen $0 $INSTDIR\start.cmd w
IfErrors done
FileWrite $0 "echo off"
FileWrite $0 "$\n"
FileWrite $0 "set cwd=$INSTDIR\"
FileWrite $0 "$\n"
FileWrite $0 "set path=%cwd%jre\bin;%cwd%lib\passportLib;%cwd%lib\printer;%cwd%lib\faceLib\win32-x86;%cwd%lib\ceflib\lib\win32;%path%"
FileWrite $0 "$\n"
${If} $selectedPos == 1
FileWrite $0 "start javaw -Dfids.backend.url=$depUrl -Dfile.encoding=UTF-8 -Djna.library.path=%cwd%\idcard -classpath %cwd%lib\*;%cwd%lib\ceflib\*;%cwd%jre\lib\*;%cwd%jre\lib\ext\*;%cwd%bin\pss-front.jar com.cares.pssfront.PssFrontApplication"
${EndIf}
${If} $selectedPos == 0
FileWrite $0 "start javaw -Dfids.backend.url=$arrUrl -Dfile.encoding=UTF-8 -Djna.library.path=%cwd%\idcard -classpath %cwd%lib\*;%cwd%lib\ceflib\*;%cwd%jre\lib\*;%cwd%jre\lib\ext\*;%cwd%bin\pss-front.jar com.cares.pssfront.PssFrontApplication"
${EndIf}
FileWrite $0 "$\n"
FileClose $0
done:
FunctionEnd
Section "MainSection" SEC01
SetOutPath "$INSTDIR"
SetOverwrite try
File "fids.ico"
File "addr.ini"
File "license.txt"
File "start.cmd"
File /r "jre"
File /r "lib"
File /r "bin"
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\start.cmd" "" "$INSTDIR\fids.ico"
CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\start.cmd" "" "$INSTDIR\fids.ico"
SectionEnd
Section -AdditionalIcons
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEnd
Section -Post
WriteUninstaller "$INSTDIR\uninst.exe"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\start.cmd"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\fids.ico"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "${PRODUCT_NAME}" "$INSTDIR\start.cmd"
SectionEnd
Function un.onUninstSuccess
HideWindow
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已经成功的从您的电脑中删除"
FunctionEnd
Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "确定要删除 $(^Name) 和所有组件吗?" IDYES +2
Abort
FunctionEnd
Section Uninstall
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk"
Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk"
RMDir "$SMPROGRAMS\${PRODUCT_NAME}"
RMDir /r /REBOOTOK $INSTDIR
DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "${PRODUCT_NAME}"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
SetAutoClose true
SectionEnd
注意点
1.在脚本开始设置 Unicode true,解决中文乱码的问题。否则需要设置脚本文件编码为中文编码。
设置 Unicode true 后不要在nsis编辑器中打开,打开后中文是乱码。此时调用命令行打包就行了
效果图
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!