Не удается прикрепить процесс службы Windows - PullRequest
5 голосов
/ 28 августа 2009

У меня очень простой Windows-сервис, разработанный в vb.net 2008. Когда я пытаюсь отладить его, перейдя в меню Tools-> Attach to process, хотя я вижу, что мой сервис отключен, а тип Managed и я не могу выбрать процесс.

Как мне отладить мой сервис?

Спасибо

Ответы [ 5 ]

15 голосов
/ 06 января 2010

Если вы будете следовать базовому «учебнику» по созданию службы Windows в MSDN, вы столкнетесь с этим. Вы увидите MyNewService.vshost.exe в диалоговом окне «Присоединить к процессу», но он будет отключен. Чтобы увидеть ваш сервис, вы должны проверить ОБА «Показать процессы всех пользователей» И «Показать процессы во всех сеансах», чтобы увидеть ваш сервис. Служба работает под именем пользователя «SYSTEM», если вы следовали инструкциям в руководстве, и службы обычно запускаются в другом сеансе.

Как только вы установите оба этих флажка (и проигнорируете MyNewService.vshost.exe), вы увидите MyNewService.exe, который вы сможете выбрать и отладить.

Конечно, ничего не произойдет, пока служба не достигнет точки останова. Вы можете создать обработчик OnPause (например, OnContinue), но для того, чтобы приостановить работу службы, вам необходимо установить флаг CanPauseAndContinue для службы (тот же объект, что и флаг AutoLog).

Кроме того, в моем тестировании на моей 64-битной машине простая перекомпиляция проекта не позволила выполнить успешную отладку. Даже компиляция и переустановка не работали. Мне пришлось заново скомпилировать проект, затем заново скомпилировать проект установки, а затем заново установить установку, чтобы иметь возможность отладки службы.

Наконец, журнал событий можно просмотреть в окне просмотра событий в разделе «Администрирование» на панели управления. «MyNewLog» находится в разделе «Журналы приложений и служб» при его создании, как описано в учебном руководстве по MSDN.

10 голосов
/ 28 августа 2009

Подключение к услуге должно работать, поэтому я не уверен, почему вы не можете. Вместо этого вставьте следующую строку в точку входа приложения для службы Windows (или метода OnStart ()), скомпилируйте в режиме отладки и запустите службу.

System.Diagnostics.Debugger.Break();

При запуске службы вам будет предложено отладить процесс. Выберите отладчик Visual Studio 2008, и процесс загрузится и остановится на вашей программной точке останова. Нажмите F5, чтобы начать снова.

EDIT:

Допустим, вы создали службу (режим выпуска или режим отладки - это не имеет значения) и использовали installutil для установки службы, но вы еще не запустили ее. Пока служба не работает, вы можете продолжать вносить изменения в код и перекомпилировать. Когда вы запускаете сервис, ваш сервис будет отражать ваши последние изменения кода. Если служба работает , вы не сможете полностью скомпилировать службу, поскольку exe / dll (s) используются и не могут быть заменены. Очевидно, что просто остановите службу, перекомпилируйте, а затем перезапустите службу. Дело в следующем: Вам не нужно удалять службу, чтобы изменить код. Просто остановите ее, измените код, перекомпилируйте и перезапустите.

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

По умолчанию, когда вы создаете приложение Visual Studio в режиме отладки, оно помещается в подкаталог bin \ Debug вашего проекта. При сборке в режиме выпуска исполняемый файл помещается в подкаталог bin \ Release. Когда вы используете installutil для установки вашего сервиса, единственное, что имеет значение, это где находится сервис. В вашем случае я бы предложил удалить версию службы в режиме выпуска (installutil /u c:\myapp\myapp\bin\release\myapp.exe), установить программную точку останова, создать отладочную версию и затем использовать installutil для установки отладочной версии (из bin \ Debug каталог).

Извините, это было многословно. Надеюсь, это понятно.

3 голосов
/ 28 августа 2009

Вы уверены, что смотрите на фактический процесс обслуживания? Проверьте имя службы - это что-то вроде servicename.vshost.exe? Если это так, то это не ваш сервис, а процесс размещения визуальной студии, используемый для отладки F5 (среди прочего)

Для отладки вашей службы установите флажок «Показывать процессы от всех пользователей». Вы должны увидеть фактический процесс службы, servicename.exe, в списке процессов. Если он виден, просто присоединитесь к этому процессу.

1 голос
/ 09 августа 2013

Я должен был не только установить флажки show processes from all users и show processes in all sessions; Мне также пришлось нажать кнопку Select, а затем выбрать код Managed.

enter image description here

0 голосов
/ 28 августа 2009

Служба - это не что иное, как консольное приложение, поэтому вы должны иметь возможность запускать exe из командной строки, если она была скомпилирована в режиме отладки. Как только процесс запускается из командной строки, вы можете перейти к Debug => attach для процесса в visual studio и подключиться к исполняемому файлу, который вы только что запустили из командной строки. Вы также можете запускать в Visual Studio IDE напрямую с помощью F5.

Если ваша служба работает под специальной учетной записью пользователя, вам нужно будет использовать команду runas / user для запуска Visual Studio, если вы выполняете отладку в Visual Studio, или из командной строки, если вы запускаете ее из командной строки. .

Если это не сработает .... дайте мне знать.

С наилучшими пожеланиями, Michael

...