Службе Windows C# Не Удается Зарегистрировать Событие завершения работы в Удаленном API

#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.