|
|
||
|---|---|---|
| .. | ||
| KronaStaffService.csproj | ||
| KronaStaffWorker.cs | ||
| Program.cs | ||
| README.md | ||
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