Я пишу службу Windows, которая должна знать, есть ли какие-либо пользователи, вошедшие в систему в данный момент.
До сих пор я пробовал Win32_LogonSession
(WMI) и LsaEnumerateLogonSessions
/ LsaGetLogonSessionData
(secur32.dll).
Оба работают и, похоже, возвращают одни и те же данные, но они слишком медленны для обновления при выходе пользователя из системы:
- Когдасистема запускается, они возвращают «0 интерактивных пользователей».(ОК)
- Когда я вхожу, они возвращают «1 интерактивного пользователя».(ОК)
- Но когда я выйду из системы, число пользователей останется равным 1. После нового входа в систему число будет равно 2 и т. Д.
Таким образом, Win32_LogonSession или LsaEnumerateLogonSessions достаточно хороши. Служба должна знать об этом в течение 5 минут после того, как ушел последний интерактивный пользователь.
Даже SysInternals 'LogonSessions.exe не дает актуальных ответов.
Кроме того, ответ не можетбыть «отслеживать события входа и выхода из системы и иметь переменную счетчика», потому что служба может быть запущена в любое время.