krona-staff/apps/KronaStaffService/README.md
Ochenstarik a05777c59f style: rebuild formatting without sync behavior changes
Recreate the formatting baseline from f5ac179 using only Prettier output. Leave sync and tenant-isolation files byte-identical to the base so Antigravity and Grok retain ownership. Normalized comparison confirms all 19 changed files are formatting-only; npm run check passes. Full format check retains five upstream warnings in excluded files.
2026-09-26 16:09:55 +07:00

4.2 KiB
Raw Blame History

Krona Staff Service (Windows Service)

Фоновая системная служба Windows для Krona Staff Terminal.

Назначение

  • Фоновая отправка очереди отметок посещаемости (check_in, check_out, автоматический уход) на сервер Staff API через HTTPS.
  • Непрерывная синхронизация очереди даже после выхода интерактивного пользователя из Windows (Log off / Switch user).
  • Идемпотентная доставка событий с сохранением Idempotency-Key (ULID) и предотвращением дубликатов при сетевых сбоях.
  • Предоставление защищённого локального IPC-канала (Named Pipe \\.\pipe\KronaStaffTerminalPipe) для взаимодействия с пользовательским интерфейсом KronaStaffTerminal.
  • Проверка и публикация статуса лицензии через ILicenseStatusPort.

Архитектура и изоляция Session 0

В операционных системах Windows (начиная с Windows Vista / Server 2008 и включая Windows 10/11) службы выполняются в изолированной сессии Session 0 без интерактивного рабочего стола.

Результаты анализа ZKFinger SDK 5.3 и драйвера SLK20R в Session 0:

  1. Пользовательская библиотека libzkfp.dll и драйвер slk20r.sys при инициализации используют оконные сообщения Win32 (WM_DEVICECHANGE) и оконные дескрипторы для отслеживания PnP-событий USB, а также дескрипторы интерфейсов устройств, привязанные к интерактивным пользовательским сессиям.
  2. При вызове zkfp2.Init() в Session 0 драйвер сообщает 0 подключённых устройств (GetDeviceCount() == 0) либо завершается с кодом ошибки дескриптора (-1 / -7).
  3. Попытка эксклюзивного захвата USB-устройства службой Session 0 блокирует доступ к сканеру со стороны интерактивного пользовательского сеанса для регистрации новых отпечатков.

Принятое решение:

  • KronaStaffService работает как системная служба Windows и берет на себя непрерывную синхронизацию очереди отметок, хранение состояния в %ProgramData%\Krona\StaffTerminal под защитой Windows DPAPI (DataProtectionScope.LocalMachine) и IPC-шлюз.
  • Интерактивное приложение KronaStaffTerminal подключается к сканеру SLK20R в пользовательской сессии (с автозапуском при входе в систему и сворачиванием в трей), выполняет высокоточное распознавание и регистрацию отпечатков, фиксирует отметки и передаёт их в очередь службы.
  • Если интерактивный пользователь выходит из системы или закрывает приложение, служба KronaStaffService продолжает выгрузку всех накопленных офлайн-событий на сервер.

Управление службой

Установка и регистрация службы:

sc.exe create KronaStaffService binPath= "C:\Program Files\Krona Staff Terminal\KronaStaffService.exe" start= auto obj= "NT AUTHORITY\SYSTEM" DisplayName= "Krona Staff Service"
sc.exe start KronaStaffService

Остановка и удаление:

sc.exe stop KronaStaffService
sc.exe delete KronaStaffService