#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. Я сделаю это завтра (система не позволяет мне сделать это сейчас).