Pull to refresh

Отладка службы Windows

Reading time2 min
Views27K
Здравствуйте, хабралюди. Если вы никогда не писали службы Windows, но вам вдруг понадобилось, то этот небольшой пост для вас.

Зачем это всё?


Если вы взялись за написание службы, то встаёт вопрос об её отладке. В интернетах в основном пишут про способ, который заключается в подключении отладчика к уже запущенному процессу службы, про альтернативу которому я и хочу рассказать. Т.к. служба — это не совсем обычный процесс Windows, просто запустить её из Visual Studio у вас не получится.

Установка службы


При попытке запуска вам будет показано сообщение, что, мол, служба запуститься не может и вам нужно использовать installutil.exe для её установки.
Windows Service Start Failure message
Для установки службы вам потребуется консоль Visual Studio, которая находится по пути
Пуск → Программы → Visual Studio 2008 → Visual Studio Tools → Visual Studio 2008 Command Prompt
(в зависимости от версии установленной VS путь может отличаться)
После запуска консоли переходим в директорию, в которую собирается ваша служба в режиме Debug и устанавливаем её:
installutil.exe /i <имя вашей сборки со службой>
Более вам installutil.exe не потребуется. Для удобства запускаем консоль управления службами Windows:
services.msc
Теперь консоль Visual Studio можно закрыть.
Переходим к самому интересному :-)

Отладка службы


Способ №1 (подключение отладчика)


  1. Запустите службу с помощью консоли управления службами Windows.
  2. В Visual Studio выберите
    Tools → Connect To Process
    в появившемся диалоговом окне выберите имя процесса службы и нажмите кнопку Attach
После этого можно расставлять точки останова и отлаживать службу.
У этого способа есть недостаток: без дополнительных ухищрений не получится отладить код, находящийся в обработчике OnStart.

Способ №2 (подключение отладчика из исходного кода)


В код модуля program.cs, сразу после начала метода Main() добавляем следующее:
#if DEBUG
System.Diagnostics.Debugger.Launch();
#endif

Этот код подключает отладчик к процессу и компилируется только в режиме DEBUG. Теперь для отладки службы её нужно запускать не из Visual Studio, а с помощью консоли управления службами (или команды net start). Сразу после запуска появится диалоговое окно выбора отладчика:

Выбираете запущенный экземпляр Visual Studio, нажимаете Yes и наслаждаетесь отладкой!

Способ №3 (запуск с параметрами командной строки)


предложил Gwynbleidd

Есть еще способ — предусматривать возможность запуска службы как консольного приложения. Например, в командной строке передавать /console, и если этот флаг установлен, стартовать приложение как консольное, если нет — как службу.

Преимущества такого подхода:
Очень просто отлаживать, по сути дела, как обычное консольное приложение. В консоль можно выводить отладочную информацию

Спасибо komr за помощь в отладке текста :-)
Tags:
Hubs:
+8
Comments34

Articles