Установка WindowsService для отладки
-
22-10-2019 - |
Вопрос
Я пытаюсь начать сборку отладки WindowsService
Но получаю ошибку, которую она не началась своевременно.
Я вычистил CTOR и OnStart
Но все же это не начнется, поэтому я думаю, что, может быть, DLL, которую он загружает, должен быть лучше установлен, а не просто в каталоге отладки моего каталога проекта. Может быть, все это в main()
вывешивает это, чтобы высохнуть?
Есть ли указатели на отладку услуги? Я не могу запустить его напрямую в Vstudio, потому что, очевидно, это не позволяет вступить в его OnCustomCommand(int cmd)
Участник и ломает его там.
Решение
Если я правильно понимаю, вы хотите иметь возможность отладить услугу, прежде чем он составит в своем холостом ходу », началось?
Вы можете использовать Debugger.break () функция для этого. Например, мы часто вкладываем следующее в нашу основную функцию, находясь в сборке отладки:
#if DEBUG
if (!Debugger.IsAttached)
{
Debugger.Break();
}
#endif
Другие советы
Я бы сделал только как можно меньше в методе OnStart, достаточно init, чтобы запустить нить, которая выполняет всю работу, так что вы можете вернуться из OnStart как можно быстрее. Затем в Delegate вы можете добавить код Reddog, чтобы проникнуть в отладчик, возможно, с потоком.
Другая альтернатива - добавить основной метод в ваш сервис, который может создать экземпляр класса сервиса и вызвать Onstart/onstop и изменить вывод проекта на приложение консоли, затем вы получите лучшее из обоих миров, он будет установлен как Сервис через InstallUtil, и вы можете запустить его и отлаживать в Visual Studio в качестве приложения для консоли.
Подробности здесь
Если вы хотите отладить услугу только в качестве сервиса, то я бы предположил, что ваш метод ONSTART запускает поток, который выполняет обработку, а затем возвращается, то поток делегат может сделать поток. Debugger.break ();
Сон потока дает вам возможность прикрепить отладчика к процессу, после того как вы запустили службу с помощью менеджера по управлению сервисом, затем он попадает в отладчик (), который заставит отладчик сломаться, что позволит вам сделать один шаг. Ключевым моментом является возвращение из OnStart до 30 секунд и прикрепить отладчика к процессу, прежде чем вы нажмете свои точки останова.
Кроме того, я думаю, что Debugger.Break дает вам возможность прикрепить отладчика, поэтому попробуйте это в коде (не уверен, что он хорошо играет с услугами, хотя у них не должно быть пользовательского интерфейса), у вас может быть снят с рук отладчика. Breake. Breake. в ваш делегат и прикреплять к процессу до 30 секунд.