2010-03-09 3 views
1

У меня есть служба Windows, и я хотел бы видеть, что она делает, когда она запускается. Обычно, чтобы выполнить что-то подобное, я бы запрограммировал Thread.Sleep как 10 секунд, чтобы дать мне достаточно времени, чтобы прикрепить отладчик. Это эффективно, но раздражает, так как мне нужно повторно скомпилировать один раз, чтобы поставить паузу внутри и снова, когда я (надеюсь, не забуду) сделаю паузу. Я знаю, что я мог бы в качестве альтернативы жестко закодировать команду break, но это также требует от меня повторного компиляции моего решения.Можно ли предварительно подключить отладчик к сервису?

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

Есть ли способ, которым я могу подключить свой отладчик к моей службе, чтобы я мог видеть, что он делает при запуске, без жесткого кодирования и перекомпиляции чего-либо?

ответ

2

Существует ключ реестра, который дает возможность присоединить отладчик к процессу, как только он будет создан.

Сохранить следующий фрагмент как файл * .reg и импорта в реестр:

Windows Registry Editor Version 5.00 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\services.exe] 
"Debugger"="c:\\Program Files\\Debugging Tool For Windows\\windbg.exe" 

не забудьте изменить «services.exe» на фактические услуги имя исполняемого файла.

Вы также можете использовать инструмент gflag для облегчения работы. Для получения подробной информации, пожалуйста, проверьте KB 824344: How to debug Windows services

0

Посмотрите на прикрепление к процессу в меню «Инструменты» в Visual Studio. Вы можете поместить точку останова в свой код, а затем запустить процесс и отладить службу. Возможно, вам придется поместить thread.sleep(), чтобы дать вам достаточно времени для реагирования.

Вам необходимо запустить службу, а не присоединяться к процессу в Visual Studio. Thread.sleep() даст вам время, чтобы выполнить прикрепление, не дуя от вашего стартового кода.