#c# #windows #service
Вопрос:
Я создаю службу Windows C# для регистрации определенных событий Windows. В то время как большинство из них в порядке (Вход/выключение, Блокировка/разблокировка и т. Д.) У меня возникли некоторые проблемы с событиями типа отключения питания Windows. Код, который я пытаюсь выполнить, приведен ниже (заимствован из других советов в другом месте).
За услугу :-
public Service()
{
InitializeComponent();
SystemEvents.SessionEnded = new SessionEndedEventHandler(SystemEvents_SessionEnded);
SystemEvents.PowerModeChanged = new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);
}
Для SystemEvents_SessionEnded :-
void SystemEvents_SessionEnded(object sender, SessionEndedEventArgs e)
{
switch (e.Reason)
{
case SessionEndReasons.SystemShutdown:
eventType = 7;
break;
case SessionEndReasons.Logoff:
eventType = 2;
break;
default:
break;
}
\Send eventType and current DateTime to remote API
}
И для SystemEvents_PowerModeChanged
static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
switch (e.Mode)
{
case PowerModes.Suspend:
eventType = 5;
break;
case PowerModes.Resume:
eventType = 6;
break;
default:
break;
}
\Send eventType and current Datetime to API
}
Поскольку API размещен снаружи на локальном компьютере, я предполагаю, что моя служба зависит от других, чтобы отправлять данные по сети? Какие-либо советы относительно того, является ли мой код неудачным или мне нужна лучшая настройка зависимостей?
Заранее спасибо.
Комментарии:
1. В документах SessionEnded говорится, что это событие возникает только в том случае, если запущен насос сообщений. В службе Windows, если не используется скрытая форма или насос сообщений не был запущен вручную, это событие не будет вызвано. Пример кода, показывающий, как обрабатывать системные события с помощью скрытой формы в службе Windows, см. в классе SystemEvents .
2. Это здорово, спасибо за информацию, я переместил свой код в структуру, указанную во второй ссылке, и теперь он запускается.
Ответ №1:
В документах, опубликованных на сессии, говорится:
Это событие возникает только в том случае, если запущен насос сообщений. В службе Windows, если не используется скрытая форма или насос сообщений не был запущен вручную, это событие не будет вызвано. Пример кода, показывающий, как обрабатывать системные события с помощью скрытой формы в службе Windows, см. в классе SystemEvents.