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