需求

自助终端打包安装需要根据不同的位置设置不同的访问路径

实现

在欢迎页和许可页之间插入一个自定义页面,用于选择自助终端的位置

在成功安装后,将访问路径写入启动文件

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编辑器中打开,打开后中文是乱码。此时调用命令行打包就行了

效果图

upload successful



打包      NSIS 打包 自定义页面

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!