Я бы сделал как можно меньше в методе OnStart, достаточно init, чтобы запустить поток, который выполняет всю работу, чтобы вы могли вернуться из OnStart так быстро, как только можете.Затем в делегате потока вы можете добавить код Reddog для взлома отладчика, возможно, с помощью thread.sleep, чтобы дать вам время сначала присоединиться к процессу.
Другой альтернативой является добавление основногометод для вашей службы, который может создать экземпляр класса службы и вызвать onstart / onstop и изменить вывод проекта на консольное приложение, тогда вы получите лучшее из обоих миров, он будет установлен как служба через installutil, и выможет f5 запустить его и отладить в Visual Studio как консольное приложение.
Подробнее здесь
Если вы хотите отлаживать службу только как службу, то я быПредположим, что ваш метод OnStart запускает поток, который выполняет обработку, а затем возвращает его, затем делегат потока может выполнить Thread.Sleep (некоторое разумное количество времени), а затем Debugger.Break ();
Спящий потокдает вам возможность присоединить отладчик к процессу, после того, как вы запустили службу с помощью диспетчера управления службами, она получитs к Debugger.Break (), который заставит отладчик сломаться, позволяя вам сделать один шаг.Главное - вернуться из OnStart за 30 секунд и подключить отладчик к процессу до того, как вы достигнете своих точек останова.
Кроме того, я думаю, что Debugger.Break дает вам возможность присоединить отладчик, поэтому попробуйтечто в коде (не уверен, что он хорошо работает со службами, хотя, как предполагается, у них нет пользовательского интерфейса), вам может быть не нравится вставлять Debugger.Break в ваш делегат и подключаться к процессу до 30 секунд.