Я пишу C # .NET 3.5 Windows Service, которая должна выполнять некоторые действия всякий раз, когда происходит вход пользователя в систему или событие разблокировки.Я попытался зарегистрировать службу, добавив обработчик событий в Microsoft.Win32.SystemEvents.SessionSwitch:
using Microsoft.Win32;
SystemEvents.SessionSwitch += new SessionSwitchEventHandler(SystemEvents_SessionSwitch);
void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
if (e.Reason == SessionSwitchReason.SessionLogon)
{
// Do Task
}
else if (e.Reason == SessionSwitchReason.SessionUnlock)
{
// Do Task
}
}
Также я попытался переопределить метод OnSessionChange(SessionChangeDescription changeDescription) {...}
, унаследованный классом ServiceBase
:
protected override void OnSessionChange(SessionChangeDescription changeDescription)
{
if (changeDescription.Reason == SessionChangeReason.SessionLogon)
{
// Do Task
}
else if (changeDescription.Reason == SessionChangeReason.SessionUnlock)
{
// Do Task
}
base.OnSessionChange(changeDescription);
}
Многие события сеанса обрабатываются любым из описанных методов, к сожалению, ни один из этих методов не обрабатывает событие разблокировки сеанса, когда быстрое переключение пользователя и терминальные службы остановлены и отключены.Однако событие обрабатывается, когда обе службы включены и работают.В рабочей среде, в которой это будет развернуто, службы не будут включены.
Есть ли другой способ сделать это в среде управляемого кода C # .NET?Многие вопросы, которые я видел, отвечают на вопрос описанными выше методами, они работают правильно, но не тогда, когда отключено как быстрое переключение пользователей, так и услуги терминалов.