krona-staff/installer/KronaStaffTerminal.nsi

172 lines
7.1 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Unicode True
SetCompressor /SOLID lzma
!include "MUI2.nsh"
!include "x64.nsh"
!ifndef APP_VERSION
!define APP_VERSION "0.3.0"
!endif
!ifndef PUBLISH_DIR
!error "PUBLISH_DIR is required"
!endif
!ifndef OUTPUT_DIR
!error "OUTPUT_DIR is required"
!endif
!ifndef PROJECT_ROOT
!error "PROJECT_ROOT is required"
!endif
!define APP_NAME "Krona Staff Terminal"
!define APP_EXE "KronaStaffTerminal.exe"
!define SERVICE_EXE "KronaStaffService.exe"
!define SERVICE_NAME "KronaStaffService"
!define APP_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\KronaStaffTerminal"
!define DRIVER_URL "https://www.zkteco.com/en/Biometrics_Module_SDK/ZKFinger-SDK-for-Windows"
Name "${APP_NAME}"
OutFile "${OUTPUT_DIR}\KronaStaffTerminal-Setup-${APP_VERSION}.exe"
InstallDir "$PROGRAMFILES64\Krona Staff Terminal"
InstallDirRegKey HKLM "${APP_REGISTRY_KEY}" "InstallLocation"
RequestExecutionLevel admin
Icon "${PROJECT_ROOT}\apps\KronaStaffTerminal\Assets\AppIcon.ico"
BrandingText "Krona"
ShowInstDetails show
ShowUninstDetails show
VIProductVersion "${APP_VERSION}.0"
VIAddVersionKey /LANG=1049 "ProductName" "${APP_NAME}"
VIAddVersionKey /LANG=1049 "CompanyName" "Krona"
VIAddVersionKey /LANG=1049 "LegalCopyright" "Copyright © 2026 Krona"
VIAddVersionKey /LANG=1049 "FileDescription" "Установщик ${APP_NAME}"
VIAddVersionKey /LANG=1049 "FileVersion" "${APP_VERSION}"
VIAddVersionKey /LANG=1049 "ProductVersion" "${APP_VERSION}"
!define MUI_ABORTWARNING
!define MUI_ICON "${PROJECT_ROOT}\apps\KronaStaffTerminal\Assets\AppIcon.ico"
!define MUI_UNICON "${PROJECT_ROOT}\apps\KronaStaffTerminal\Assets\AppIcon.ico"
!define MUI_FINISHPAGE_RUN "$INSTDIR\${APP_EXE}"
!define MUI_FINISHPAGE_RUN_TEXT "Запустить Krona Staff Terminal"
!define MUI_FINISHPAGE_LINK "Скачать официальный драйвер ZKTeco/BioLink SLK20R"
!define MUI_FINISHPAGE_LINK_LOCATION "${DRIVER_URL}"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
Function .onInit
${If} ${RunningX64}
SetRegView 64
${Else}
MessageBox MB_ICONSTOP "Для работы программы требуется 64-разрядная версия Windows."
Abort
${EndIf}
FunctionEnd
Function un.onInit
${If} ${RunningX64}
SetRegView 64
${EndIf}
FunctionEnd
Section "Krona Staff Terminal" SecMain
SectionIn RO
SetShellVarContext all
DetailPrint "Остановка службы ${SERVICE_NAME} (если запущена)..."
ExecWait 'sc.exe stop ${SERVICE_NAME}'
Sleep 500
SetOutPath "$INSTDIR"
SetOverwrite try
File /r "${PUBLISH_DIR}\*"
DetailPrint "Настройка службы ${SERVICE_NAME}..."
ExecWait 'sc.exe create ${SERVICE_NAME} binPath= "\"$INSTDIR\${SERVICE_EXE}\"" start= auto DisplayName= "Krona Staff Service"'
ExecWait 'sc.exe config ${SERVICE_NAME} binPath= "\"$INSTDIR\${SERVICE_EXE}\"" start= auto'
ExecWait 'sc.exe description ${SERVICE_NAME} "Служба фоновой синхронизации Krona Staff Terminal"'
DetailPrint "Запуск службы ${SERVICE_NAME}..."
ExecWait 'sc.exe start ${SERVICE_NAME}'
WriteUninstaller "$INSTDIR\Uninstall.exe"
CreateDirectory "$SMPROGRAMS\Krona"
CreateShortcut "$SMPROGRAMS\Krona\Krona Staff Terminal.lnk" "$INSTDIR\${APP_EXE}" "" "$INSTDIR\${APP_EXE}" 0
WriteRegStr HKLM "${APP_REGISTRY_KEY}" "DisplayName" "${APP_NAME}"
WriteRegStr HKLM "${APP_REGISTRY_KEY}" "DisplayVersion" "${APP_VERSION}"
WriteRegStr HKLM "${APP_REGISTRY_KEY}" "Publisher" "Krona"
WriteRegStr HKLM "${APP_REGISTRY_KEY}" "InstallLocation" "$INSTDIR"
WriteRegStr HKLM "${APP_REGISTRY_KEY}" "DisplayIcon" "$INSTDIR\${APP_EXE}"
WriteRegStr HKLM "${APP_REGISTRY_KEY}" "UninstallString" "$\"$INSTDIR\Uninstall.exe$\""
WriteRegDWORD HKLM "${APP_REGISTRY_KEY}" "NoModify" 1
WriteRegDWORD HKLM "${APP_REGISTRY_KEY}" "NoRepair" 1
# Create install log
FileOpen $9 "$INSTDIR\install.log" w
FileWrite $9 "Krona Staff Terminal v${APP_VERSION} installed successfully at: $INSTDIR$\r$\n"
FileClose $9
# Driver detection check
IfFileExists "$SYSDIR\drivers\slk20r.sys" driver_present 0
IfFileExists "$SYSDIR\drivers\zkfp.sys" driver_present 0
IfFileExists "$SYSDIR\drivers\zkfpos.sys" driver_present 0
IfFileExists "$SYSDIR\drivers\ZKUSB.sys" driver_present 0
ReadRegStr $1 HKLM "SYSTEM\CurrentControlSet\Services\slk20r" "ImagePath"
StrCmp $1 "" 0 driver_present
ReadRegStr $1 HKLM "SYSTEM\CurrentControlSet\Services\zkfp" "ImagePath"
StrCmp $1 "" 0 driver_present
ReadRegStr $1 HKLM "SYSTEM\CurrentControlSet\Services\ZKUSB" "ImagePath"
StrCmp $1 "" 0 driver_present
DetailPrint "Драйвер сканера ZKTeco SLK20R не обнаружен."
IfSilent driver_done
MessageBox MB_YESNO|MB_ICONINFORMATION "Драйвер биометрического сканера ZKTeco SLK20R не обнаружен в системе.$\r$\n$\r$\nДля работы со сканером отпечатков пальцев требуется официальный драйвер ZKTeco.$\r$\n$\r$\nОткрыть страницу загрузки официального драйвера сейчас?" IDNO driver_done
ExecShell "open" "${DRIVER_URL}"
Goto driver_done
driver_present:
DetailPrint "Драйвер биометрического сканера обнаружен."
driver_done:
SectionEnd
Section "Значок на рабочем столе" SecDesktop
SetShellVarContext all
CreateShortcut "$DESKTOP\Krona Staff Terminal.lnk" "$INSTDIR\${APP_EXE}" "" "$INSTDIR\${APP_EXE}" 0
SectionEnd
LangString DESC_SecMain ${LANG_RUSSIAN} "Основная программа учёта прихода и ухода со службой синхронизации."
LangString DESC_SecDesktop ${LANG_RUSSIAN} "Создать значок программы на рабочем столе."
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecMain} $(DESC_SecMain)
!insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} $(DESC_SecDesktop)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Section "Uninstall"
SetShellVarContext all
DetailPrint "Остановка службы ${SERVICE_NAME}..."
ExecWait 'sc.exe stop ${SERVICE_NAME}'
Sleep 1000
DetailPrint "Удаление службы ${SERVICE_NAME}..."
ExecWait 'sc.exe delete ${SERVICE_NAME}'
IfSilent keep_data
MessageBox MB_YESNO|MB_ICONQUESTION "Сохранить локальную базу данных и журнал терминала (%ProgramData%\Krona\StaffTerminal)?$\r$\n$\r$\nНажмите 'Да', чтобы сохранить данные для будущей установки.$\r$\nНажмите 'Нет', чтобы полностью удалить данные с устройства." IDYES keep_data
RMDir /r "$APPDATA\Krona\StaffTerminal"
RMDir "$APPDATA\Krona"
keep_data:
Delete "$DESKTOP\Krona Staff Terminal.lnk"
Delete "$SMPROGRAMS\Krona\Krona Staff Terminal.lnk"
RMDir "$SMPROGRAMS\Krona"
DeleteRegKey HKLM "${APP_REGISTRY_KEY}"
RMDir /r "$INSTDIR"
SectionEnd