Как вы отлаживаете службу Windows? - PullRequest
46 голосов
/ 01 марта 2011

Я прочитал статью MSDN по этой теме.Цитата:

Поскольку служба должна запускаться из контекста диспетчера служб, а не из Visual Studio, отладка службы не так проста, как отладка других типов приложений Visual Studio.Чтобы отладить сервис, вы должны запустить сервис, а затем подключить отладчик к процессу, в котором он запущен.Затем вы можете отладить ваше приложение, используя все стандартные функции отладки Visual Studio.

Теперь моя проблема заключается в том, что мой сервис не запускается с самого начала.Сначала он вылетает и говорит:

Необработанное исключение (System.Runtime.InteropServices.COMException) произошло в MyServiceName.exe [3596])

и предлагает мнеотладить его (экземпляр отладчика мгновенно падает, когда я выбираю один).Затем он говорит

Не удалось запустить службу MyServiceName на локальном компьютере.Ошибка 1053: Служба не ответила на запрос запуска или управления своевременно

Итак, как я могу выяснить / отладить причину, по которой моя служба не запустилась?Дело в том, что я создал консольное приложение, которое делает ТОЧНО то, что делает служба, и работает нормально.(Я имею в виду, что я просто скопировал метод OnStart () и содержимое основного цикла в main).

Любая помощь приветствуется.

Служба написана на C # с интенсивным использованиемInterop.Я использую VS2008

Ответы [ 15 ]

3 голосов
/ 01 марта 2011

Службы отладки - это боль, особенно потому, что при запуске кажется, что многие проблемы проявляются (по крайней мере, для нас).

Обычно мы извлекаем как можно больше логики из одногокласс с методами start и stop.Эти методы класса - это все, что служба вызывает напрямую.Затем мы создаем приложение WinForm, которое имеет две кнопки: одна для запуска start, другая для вызова stop.Затем мы можем запустить это приложение WinForm прямо из отладчика и посмотреть, что происходит.

Не самое элегантное решение, но оно работает для нас.

3 голосов
/ 01 марта 2011

Я бы предположил, что причина может быть вызвана интенсивным использованием взаимодействий. Таким образом, вам нужно решить эту проблему по-другому. Я бы предложил создать приложение для Windows или консоли с той же логикой вашей службы и убедиться, что оно сначала работает без каких-либо проблем, а затем вы можете захотеть приступить к созданию службы Win.

2 голосов
/ 28 марта 2014

Использовать следующий код в методе запуска службы:

System.Diagnostics.Debugger.Launch();

Выберите опцию Visual Studio из всплывающего сообщения

2 голосов
/ 01 марта 2011

То, что я сделал, реализовано OnStart (), чтобы выглядеть примерно так:

_myBusinessObject = new MyBusinessObject();

После того, как бизнес-объект создан, таймеры и обработчики IPC выполняют всю реальную (служебную) работу.

Делая так, вы можете создать приложение Forms / WPF, которое вызывает тот же код, что и выше в обработчике Form_Loaded. Таким образом, отладка приложения Forms точно такая же, как и отладка Сервиса.

Единственная проблема заключается в том, что если вы используете значения app.config, то будет второй файл app.config, который необходимо обновлять.

1 голос
/ 07 марта 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...