Вы можете узнать причину отключения, изучив EventLog.
Я собрал небольшую демонстрацию по Windows Forms, которую можно адаптировать к своей службе Windows.
Я добавил компонент EventLog в форму и настроил его правильно. Фрагмент ниже показывает код, сгенерированный в InitializeComponent () для настроек, которые я отправил через конструктор.
this.eventLog1.EnableRaisingEvents = true;
this.eventLog1.Log = "System";
this.eventLog1.Source = "USER32";
this.eventLog1.SynchronizingObject = this;
this.eventLog1.EntryWritten += new System.Diagnostics.EntryWrittenEventHandler(this.eventLog1_EntryWritten);
В обработчике событий у вас будет что-то вроде следующего:
private void eventLog1_EntryWritten(object sender, System.Diagnostics.EntryWrittenEventArgs e)
{
EventLogEntry entry = e.Entry;
if (e.Entry.EventID == 1074)
{
File.AppendAllText(@"c:\message.txt", entry.Message);
}
}
Взгляните на свой журнал событий, чтобы увидеть соответствующие EventIds для фильтрации.
Компилятор предупредит вас об устаревшем EventID и сообщит, что вы должны использовать InstanceId, но в быстрых тестах, которые я здесь сделал, он не записывал в мой файл журнала, и я думаю, что у нас уже достаточно информации, чтобы поставить вас на путь.