У меня есть регулярная служба C#, основанная на классе ServiceBase. Эта служба загружается при запуске библиотеки динамических ссылок C++. Иногда случается, что сбой службы в неуправляемом коде. К сожалению Event Viewer дает только очень краткое описание этого. Вот как выглядит один, если его сообщения:Исключение службы Windows не обрабатывается
Применение: StreamMapService.exe Framework Version: v4.0.30319 Описание: Процесс был прерван из-за необработанного исключения. Исключение Info:. Код исключения c0000005, адрес исключения 00000012"
С 99% уверенностью, что проблема находится в неуправляемом коде Проблема заключается в том, что это происходит очень редко (как правило, один раз в день), и только тогда, когда запущено в качестве службы.. Под отладчиком все ОК Чтобы узнать проблемный код, который я редактировал свой основной метод в следующем порядке:..
static void Main()
{
try
{
if (!Environment.UserInteractive)
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
else
{
var services = new Service1();
services.Start();
Console.WriteLine("Press return to exit");
Console.ReadLine();
services.Stop();
}
}
catch (SEHException e)
{
// wrapper for all exceptions having its origin in unmanaged code
StringBuilder sb = new StringBuilder();
sb.AppendFormat("Crash time: {0}\n", DateTime.Now.ToString());
sb.AppendFormat("\nMessage:\n{0}", e.Message);
sb.AppendFormat("\nSource: {0}\n", e.Source);
sb.AppendFormat("Stack trace:\n{0}", e.StackTrace);
sb.AppendFormat("\nTarget site:{0}", e.TargetSite);
SmtpClient client = new SmtpClient("mail.domain.com");
MailAddress from = new MailAddress("[email protected]", "sender", System.Text.Encoding.UTF8);
MailAddress to = new MailAddress("[email protected]");
MailMessage message = new MailMessage(from, to);
message.Body = sb.ToString();
message.Subject = "StreamMapService crash info";
client.Send(message);
throw;
}
}
Чтобы проверить этот обработчик исключений я произвел тест исключение в некоторой части неуправляемого кода все функционирует нормально, когда я запускаю службы в отладчике или из командной строки.
Я получаю сообщение электронной почты с информацией об исключении (самое главное, он содержит столбец, в котором возникло неуправляемое исключение).
Но когда я запускаю эту программу в качестве системного сервиса (из панели управления -> Администрирование -> Службы), служба явно терпит крах (она перестает реагировать на интерфейс tcp, а также средство просмотра событий содержит информацию о сбоях), но я не получаю ни одной электронной почты.
Похоже, что обработчик исключений даже не вызывается в этом случае. Я пытался написать информацию об исключении в файл, но это то же самое происходит.
Таким образом, при запуске под отладчиком или из командной строки информация о вызове корректно регистрируется. При запуске в качестве системного сервиса ничего не происходит. Похоже, что обработка исключений работает неправильно в этом состоянии.
открыть окно командной строки и ваш отладчик и запустить в качестве администратора, то сказать ситуация. Это chrashing так же, как, когда вы запускаете его как службы. И до отладки изменения его версия рамки до ниже или равна 3.5 – PawanS