문제

일련의 Windows 서비스를 작성하고 있습니다. 시작 중에 오류가 발생하면 실패하기를 원합니다 ( OnStart() 방법). 나는 단지 오류를 던지는 것만으로 생각했다 OnStart() 이것을 할 것인지, 그러나 나는 대신 "시작"하고 "서비스가 시작되었지만 비활성이라는 메시지가 표시되는 메시지를 제시한다는 것을 알게되었습니다. 이것이 맞습니까?" (의역). 실제로 서비스를 시작하지 않도록 오류를 처리하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

.NET 2.0 이상을 실행중인 경우 사용할 수 있습니다. servicebase.stop OnStart에서 서비스를 중지합니다. 그렇지 않으면 새 스레드에서 전화를 끊습니다.

ref [devnewsgroups] (http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic50404.aspx)

(뉴스 그룹 사라짐)

다른 팁

당신이 원하는 주요한 것이 서비스 창이 내가 시도한 것 (Windows 7의 .NET 3.5)에서 오류가 있다고보고하는 것입니다.이를 수행하는 유일한 방법은 ExitCode를 설정하는 것입니다. 이로 인해 "알 수없는 오류가 발생했습니다"라는 메시지가 발생하므로 13816으로 설정하는 것이 좋습니다. 보다 Windows 오류 코드.

아래 샘플은 세 가지를 달성합니다. 1- exitcode를 설정하면 최종 사용자에게 유용한 메시지가 나타납니다. Windows 응용 프로그램 로그에는 영향을 미치지 않지만 시스템 로그에 메시지가 포함되어 있습니다. 2- 호출 정지 결과 응용 프로그램 로그에서 "서비스가 성공적으로 중지 된"메시지가 나타납니다. 3- 예외를 던지면 응용 프로그램 로그에서 유용한 로그 항목이 발생합니다.

protected override void OnStart(string[] args) {

  try {
    // Start your service
  }
  catch (Exception ex) {
    // Log exception
    this.ExitCode = 13816;
    this.Stop();
    throw;
  }

}

모든 시작 로직을 별도의 방법으로 이동하고 해당 별도의 방법에서 예외 (또는 onstop)를 던지십시오.

Onstart는 시작할 때 몇 가지 이상한 점이 있습니다. onstart ()가 하나 이상의 줄이 있다면 "서비스가 시작된 다음 중지되지 않은 경우에는 서비스가 없으면 자동으로 중지"메시지가 표시되며 예외를 제외 할 예외가 발생합니다. 앱 이벤트 로그를 처리하고 로그인하십시오.

또한 별도의 시작 방법을 사용하면 이와 같은 기술을 사용하여 부착하지 않고 디버깅 할 수 있습니다. http://www.codeproject.com/kb/dotnet/debugwinservices.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top