2009-07-28 7 views
1

서비스 중지 중에 RegisterEventSource() 함수를 호출합니다. 그러나 시스템 종료 중에 null을 반환합니다. 이 문제가 발생하는 이유는 무엇입니까?Windows 종료시 'null'을 반환하는 RegisterEventSource 메서드

오류 : GetLastError()에서 오류 코드 0x800706b5가 표시됩니다. 봤을 때 누락 된 레지스트리 데이터와 관련이 있음을 알게되었습니다.

또한 시스템 종료가 시작되었는지 확인하는 방법은 무엇입니까? (즉, C#의 HasShutdownStarted()에 해당)

답변

3

서비스는 시스템 종료시 알림을 받을지 여부를 지정할 수 있습니다. SERVICE_ACCEPT_SHUTDOWN 플래그로 SetServiceStatus()를 호출하십시오. 그러면 서비스 제어 메시지 처리기에 SERVICE_CONTROL_SHUTDOWN 메시지가 수신됩니다.

EDIT : 실제로 Zach가 제안한 것처럼 RegisterEventSource에서 발생하는 문제는 이벤트 서비스가 이미 종료 되었기 때문에이 알림에 대한 응답으로 이벤트 로그 쓰기를 수행하면 문제가 해결 될 수도 있습니다.

+0

+1이 솔루션은 서비스 종속성을 설정하는 것보다 낫습니다. 더 많은 제어가 가능합니다. 메시지에 응답하여 정상적으로 서비스를 중지 할 수있는 기회를 얻습니다. –

2

이 동작이 전혀 없기 때문에 RegisterEventSource가 시스템 종료 중에 null을 반환하는 이유는 추측 할 수 있습니다. [면책 조항 : 오래 전에 Win32 프로그래밍 일을 버렸습니다. 현재는 100 % .NET입니다.]

또한 최신 SDK에서 액세스 할 수있는 .h 파일에서 오류 코드 0x800706b5를 찾을 수 없습니다.

시스템 종료 중에 서비스 전에 Windows 이벤트 서비스가 종료 되었습니까?

서비스와 Windows 이벤트 서비스 간의 종속성을 설정할 수 있습니다. 이렇게해야 시스템을 종료하는 동안 서비스가 먼저 종료됩니다. 아이러니하게도 내가 찾은 방법에 대한 가장 좋은 조언은 Adobe의 것입니다 : How to create a dependency between Windows services.

관련 문제