06.11.2007 16:59
Pyatak
 
ОС: Win 2k, Win XP SP2
Есть сервис, который запускается и работает под учетной записью system. Как из этого сервиса узнать, какой юзер сейчас залогинен, а еще лучше отлавливать события, когда пользователь входит и выходит? GetUserName() возвращает естественно 'system', т.к. сервис от имени этой учетной записи работает.

Есть мысль, получать список запущенных процессов и смотреть от чьего имени работает explorer, но это как-то чере "одно место" получается, да и проблему отлова входов выходов решает только путем периодического такого просмотра. Есть другие идеи?
06.11.2007 20:08
OlegON
 
Опять ты не с того края начинаешь. Зачем тебе это нужно? Понятие залогиненности весьма относительное. Запустил программу от другого пользователя - вот тебе и логин со всеми окружениями и прочим. Можно по журналу аудит отслеживать. Более правильно в загрузку юзера по умолчанию забивать клиента, который по какому-нибудь протоколу (для этого люблю TCP/UDP, ибо остальные могут быть забиты правами) сообщает серверу, что кто-то залогинился. Соответственно учитывать надо, что таких может быть несколько. Если тебе важно именно до десктопа добраться, то есть что-то вроде GetWorkstation.... не помню полностью, давно было. Но для отображения всяких тултипов и прочего можно просто давать сервису 'Interact with desktop', он тогда может юзеру окошки показывать и в трее значок.
06.11.2007 23:38
Pyatak
 
"Зачем?" - это уже вопрос второй. Мне нужно знать, когда пользователь вошел в систему и кода из нее вышел. Причем не тех, кто вошел по сети через терминалку или еще как, а именно того, кто вошел локально. Что он там после этого запускает и от чего имени, опять же вопрос второстепенный. Клиента ставить в автозагрузку в моем случае не подходит, так как клиент будет запускаться от имени вошедшего пользователя и будет иметь соответствующие ограниченные права, а также не будет работать после выхода пользователя. Мне же нужно выполнять некую работу, пока никто локально с компьютером не работает, опять же не суть какую, хоть проводить расчеты для эмулирования реакции ядерного синтеза. Еще один минус клиента из автозагрузки - пользователь может его спокойно "прибить", а вот остановить сервис у него уже прав не будет.
Остается главный вопрос, как из всех возможных "логинов" отследить именно того, кто вошел/вышел локально набрав логин+пароль в приглашении на вход в систему?
07.11.2007 10:17
OlegON
 
Я, наверное, не очень понятно выразился. Задача клиента - интерактив с сервисом. Т.е. заходит кто-то, запускается клиент, который коннектится к основному сервису и сообщает ему необходимую информацию. Ну и забить этому клиенту в OnCloseQuery принудительный logout. Ну, а как фильтровать терминальных пользователей - придется пошукать по FAQ, я уже не помню.
07.11.2007 14:37
Propil
 
Олег вроде уже ответил - аудит входа в систему настроить.
ну а дальше - логпарсер или экспорт в excel cпоследующим фильтром по событиям
Другое дело, если нужно в реальном времени...
Опять же можно затолкать в назначенные задания оповещалку, которая запустится при входе в систему
Часовой пояс GMT +3, время: 15:56.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.