Как отладить глючный Windows-сервис, который останавливается сразу после запуска

#visual-studio #visual-studio-2013 #windows-services #visual-studio-debugging #windows2012

#visual-студия #visual-studio-2013 #windows-службы #visual-studio-отладка #windows2012

Вопрос:

В настоящее время я обнаружил проблему, из-за которой один из моих проектов, представляющий собой службу Windows, останавливается сразу после запуска. Раньше такого не было.

Хуже того, я не могу подключить службу к Visual Studio, так как она остановилась сразу после запуска.

Моя система — Windows server 2012 R2, а Visual Studio — 2013.

Есть ли в любом случае для меня возможность отладить сервис?

Комментарии:

1. Дает ли журнал событий (приложение, безопасность) какие-либо подсказки?

2. Да, но сообщение об ошибке не имеет особого смысла. Там просто написано: SimpleInjector. Исключение ActivationException.

Ответ №1:

Вы можете запустить службу непосредственно в debugger. Для достижения этой цели вы можете либо изменить команду запуска службы ( sc config binPath= ), либо использовать GFlags, чтобы изменить образ службы для запуска в debugger. В обоих случаях ваш отладчик будет работать в фоновом режиме, и затем вам нужно будет удаленно подключиться к нему.

Но обычно вы можете решить проблему из дампов, если таковые имеются. Часто простой запуск исполняемого файла службы из той же учетной записи, что и служба, выявит проблему.

Наконец, давайте не будем забывать о силе printf . Добавьте ведение журнала и изолируйте проблему от журналов. Ваша служба должна делать это в любом случае.

Комментарии:

1. Вы имеете в виду, что мне нужно использовать sc config binPath для двоичного файла в папке сборки Visual Studio, а затем начать отладку в Visual Studio?

Ответ №2:

Я только что нашел ответ в MSDN.

https://msdn.microsoft.com/en-us/library/cktt23yw.aspx

Добавьте следующий код:

     System.Diagnostics.Debugger.Launch();
 

В самом начале метода OnStart. Затем запустите net start ServiceName (требуются учетные данные администратора)

Комментарии:

1. поскольку вы решили эту проблему, пожалуйста, отметьте свой ответ как ответ, так что это было бы хорошим решением, которое может помочь другим членам сообщества, которые сталкиваются с той же проблемой, что и у вас 🙂

2. Я сделаю это завтра (система не позволяет мне сделать это сейчас).