Установка WindowsService для отладки - PullRequest
0 голосов
/ 18 октября 2011

Я пытаюсь запустить отладочную сборку WindowsService, но получаю сообщение об ошибке, что он не запустился своевременно.

Я очистил ctor и OnStart, но все же этоне запускается, поэтому я думаю, что, возможно, лучше установить dll, который он загружает, а не просто в каталог отладки моего каталога проекта.Может быть, весь этот bumpf в main() вывешивает его для просушки?

Есть какие-нибудь указатели для отладки сервиса?Я не могу запустить его непосредственно в VStudio, потому что, очевидно, это не разрешает вход его члену OnCustomCommand(int cmd) и прерывает его там.

Ответы [ 2 ]

2 голосов
/ 18 октября 2011

Если я правильно понимаю, вы хотите иметь возможность отлаживать службу до того, как она будет находиться в состоянии ожидания "Запущено"?

Вы можете использовать функцию Debugger.Break () дляэтот.Например, мы часто помещаем следующее в нашу функцию Main во время отладочной сборки:

#if DEBUG

if (!Debugger.IsAttached)
{
    Debugger.Break();
}

#endif
1 голос
/ 18 октября 2011

Я бы сделал как можно меньше в методе 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 секунд.

...