2013-04-24 3 views
0

서비스와 설치 프로그램을 만들었습니다. 컴퓨터에 서비스를 설치했습니다. 서비스 화면에서 서비스가 시작되었음을 알 수 있습니다. 그것은 멈추지 않을 것입니다. 시작, 멈출 수 없습니다. 내가 할 수있는 유일한 일은 제거하는 것입니다.Windows 서비스가 'Starting'을 중지하지 않습니다.

나는 Visual Studio를 프로 세스에 붙이려고했지만 실제로 아무 일도 일어나지 않습니다. 이 서비스를 어떻게 디버깅 할 수 있습니까? 무슨 일이 일어나고 있는지 알고 싶습니다.

+0

처럼 보일 수 있습니다 수업이 너무 많이가있는 경우 보통 일이/당신의'OnStart' 핸들러 내에서 실행되는 모든 코드 - 당신이 일을 킥오프 의미하고 그곳에 * 돌아온다. 서비스가 시작된 것으로 간주되는 경우에만 반환합니다. –

+0

어떻게 거기로 돌아갈 수 있습니까? – Joetjah

답변

1

이것은 대개/OnStart 처리기 내부에서 실행중인 코드가 너무 많거나 많으면 발생합니다. 서비스가 시작된 것으로 간주되는 경우에만 반환합니다.

일반적으로 항상 실행하려는 코드를 실행하는 하나 이상의 새로운 Thread을 만들고 Start()을 반환 한 다음 반환하십시오. 또는 암시 적으로 자체 스레드 (예 : WCF의 ServiceHost)를 실행하는 개체를 만듭니다.

그런 다음 정상적으로 종료하려면 사용자의 작업이 OnStop입니다. 예 : SetManualResetEvent 그런 다음 해당 스레드에서 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. 
    } 
    } 
} 
관련 문제