Настройка службы для запуска в отладчике: http://support.microsoft.com/kb/824344 Обратите внимание на раздел «Настройка службы для запуска с подключенным отладчиком WinDbg»
Дополнение (теперь есть соответствующий код):
static void Main(string[] args)
{
ServiceBase.Run(new Program());
ServiceController service = new ServiceController();
service.ServiceName = "SpLive";
service.Start();
ServiceBase.Run(instance)
не вернется до тех пор, пока служба не будет закрыта, поэтому вы запускаете службу, а затем после ее завершения запрашиваете SCM запустить службу & hellip; это приведет только к путанице.
Это, плюс наличие таймера для попытки изменить состояние службы (запущено <-> остановлено), заставляет меня думать, что вам нужно подумать о базовой модели процессов службы Windows:
Когда exe выполняет только один сервис:
Служба запущена (при запуске системы, по запросу пользователя, ...): SCM запускает зарегистрированную командную строку
Main
работает, сообщите SCM (через ServiceBase.Run
), что это за услуга. Это должно соответствовать регистрации, использованной на шаге 1.
Экземпляр, переданный в ServiceBase.Run
, вызывает OnStart
. Служба должна запустить действия, которые она выполнит, а затем вернуть ее (т. Е. Асинхронные операции, новые потоки и пул потоков в порядке; продолжение потока, вызывающего OnStart
, - нет).
Когда поступает сигнал на отключение (из любого источника), вызывается OnStop
. Это должно вызвать остановку всех действий, которые OnStart
начались (или начались с тех пор), и ждать, пока они остановятся, а затем вернуться.
Единственная причина, по которой служба останавливается сама по себе, заключается в том, что ее запускает что-то другое (например, собственный API-интерфейс управления), но было бы лучше использовать SCM из пользовательского интерфейса.