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