2013-04-24 4 views
0

Я создал службу и установщик. Я установил свою службу на компьютер. На экране сервисов я вижу, что служба запускается. Это не остановится. Старт, я не могу приостановить его, ничего. Единственное, что я могу сделать, это деинсталлировать.Служба Windows не останавливается «Начало»

Я попытался подключить Visual Studio к процессам, но ничего не происходит. Как я могу отладить эту службу? Я хотел бы знать, что происходит.

+0

Это обычно происходит, если у вас есть слишком много/весь код работает внутри вашего 'OnStart' обработчика - вы призваны пнуть вещи тут же * return *. Это только после того, как вы вернетесь, что ваша служба считается запущенной. –

+0

Как мне туда вернуться? – Joetjah

ответ

1

Это обычно происходит, если у вас слишком много/весь ваш код работает внутри вашего обработчика OnStart - вы должны убрать с него вещи, а затем вернуться. Это только после того, как вы вернетесь, что ваша служба считается запущенной.

Обычно вы создаете один или несколько новых Thread s, которые запускают код, который вы хотите запустить все время, Start(), а затем возвратитесь. Или создайте объекты, которые неявно запускают собственную потоковую обработку (например, WCF ServiceHost).

Тогда это ваша работа в OnStop, чтобы закрыть их изящно - например. Set a ManualResetEvent, а затем Join на эти темы.

например, ваш класс может выглядеть следующим образом (не тестировалось)

public class MyService : ServiceBase { 
    private ManualResetEvent _stop = new ManualResetEvent(false); 
    private Thread _worker; 

    public override void OnStart(string[] args) { 
    _worker = new Thread(DoStuff); 
    _worker.Start(); 
    } 

    public override void OnStop() { 
    _stop.Set(); 
    _worker.Join(); 
    } 

    private void DoStuff() { 
    while(!_stop.WaitOne(0)) { 
    //Do something useful here. 
    } 
    } 
} 
Смежные вопросы