199 lines
8.5 KiB
Text
199 lines
8.5 KiB
Text
Unicode True
|
||
SetCompressor /SOLID lzma
|
||
|
||
!include "MUI2.nsh"
|
||
!include "x64.nsh"
|
||
|
||
!ifndef APP_VERSION
|
||
!define APP_VERSION "0.3.2"
|
||
!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 OPERATOR_GROUP "KronaStaffTerminalOperators"
|
||
!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 "Настройка защищённой локальной группы терминала..."
|
||
nsExec::ExecToLog 'net.exe localgroup "${OPERATOR_GROUP}"'
|
||
Pop $0
|
||
StrCmp $0 "0" group_ready
|
||
nsExec::ExecToLog 'net.exe localgroup "${OPERATOR_GROUP}" /add'
|
||
Pop $0
|
||
StrCmp $0 "0" group_ready
|
||
MessageBox MB_ICONSTOP "Не удалось создать защищённую группу ${OPERATOR_GROUP}. Установка остановлена."
|
||
Abort
|
||
group_ready:
|
||
nsExec::ExecToLog 'net.exe localgroup "${OPERATOR_GROUP}" "$USERNAME" /delete'
|
||
Pop $0
|
||
nsExec::ExecToLog 'net.exe localgroup "${OPERATOR_GROUP}" "$USERNAME" /add'
|
||
Pop $0
|
||
StrCmp $0 "0" membership_ready
|
||
MessageBox MB_ICONSTOP "Не удалось выдать текущему пользователю доступ к терминалу. Установка остановлена."
|
||
Abort
|
||
membership_ready:
|
||
CreateDirectory "$COMMONAPPDATA\Krona\StaffTerminal"
|
||
nsExec::ExecToLog 'icacls.exe "$COMMONAPPDATA\Krona\StaffTerminal" /inheritance:r /grant:r "*S-1-5-18:(OI)(CI)F" "*S-1-5-32-544:(OI)(CI)F" "$USERDOMAIN\$USERNAME:(OI)(CI)M"'
|
||
Pop $0
|
||
StrCmp $0 "0" acl_ready
|
||
MessageBox MB_ICONSTOP "Не удалось защитить хранилище терминала. Установка остановлена."
|
||
Abort
|
||
acl_ready:
|
||
|
||
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 "$COMMONAPPDATA\Krona\StaffTerminal"
|
||
RMDir "$COMMONAPPDATA\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
|