Почему моя служба C# Windows перестает работать без записи сообщений в журнал событий приложения?

Я новичок в службах Windows. Я создал установщик для своей службы С# Windows, и установка на сервере (Windows Server 2003), похоже, сработала. При запуске в лог пишет Служба успешно запущена. При остановке пишет Служба успешно остановлена. Однако иногда служба перестает работать, ничего не записывая в журнал, поэтому я запускаю ее вручную. Когда я потом смотрю журнал, он говорит, что Служба запущена успешно, как и ожидалось. Странно видеть это в журнале дважды подряд, потому что явно отсутствует запись о том, что служба каким-то образом остановилась.

Каковы возможные причины этого? Я настроил службу как автоматическую и установил ее для всех пользователей. У меня сложилось впечатление, что это означает, что служба запускается автоматически при загрузке машины. Как узнать, почему он остановился? Службы, которые аварийно завершают работу, автоматически записываются в журнал событий или мне приходится обрабатывать исключения таким образом, чтобы они регистрировали собственную причину сбоя?

Редактировать: Дополнительная информация:

  • Я настроил его для входа в систему с учетной записью локальной системы.
  • В разделе «Параметры восстановления» я настроил перезапуск при первом сбое.У меня нет ничего на второй или последующие отказы.

Обновление: Ответчик рекомендовал глобальный обработчик исключений. Хотя я не буду реализовывать это как постоянное исправление, оно, по крайней мере, поможет мне понять, где возникает проблема. Я действительно проверил это с моей установленной службой, и она работает. Я обнаружил, что необработанные исключения действительно приводят к сбою службы, вообще ничего не записывая в журнал. Я думал, что он по крайней мере сообщит об ошибке приложения, но это не так.

static void Main()
{
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

    //other code here
}

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Utilities.WriteIt(e.ExceptionObject as Exception);
}
7
задан oscilatingcretin 21 May 2012 в 16:44
поделиться