2010-08-03 4 views
2

초기화 중에 여러 COM + 호출을하는 Windows 서비스가 있습니다. 일부 시스템에서는이 Windows 서비스가 시작되는 동안 교착 상태가 발생합니다.서비스 시작시 CoCreateInstance 호출

적어도 하나 개의 서비스 또는 드라이버 서비스를 시작하는 동안 CoCreateInstance를 호출의 문제는 그것이 시작으로 다른 서비스가 필요할 수 있다는 것입니다 시스템 시작

동안 실패했습니다. 그리고 SCM은 현재 서비스가 실행 상태가되기를 기다리는 동안 다른 서비스가 시작되도록 허용하지 않습니다. 솔루션은 서비스를 설치할 때 서비스 종속성이 올바르게 구성되었는지 확인하는 것입니다. http://support.microsoft.com/kb/258943

Windows Vista/2008/7에서 실행될 때 어떤 서비스 종속성을 지정해야합니까?

답변

2

쉬운 솔루션은 서비스 시작을 "자동 (지연된 시작)"(DelayedAutoStart)로 설정하도록 COM 응용 프로그램 서비스를 구성하는 것입니다. 그런 다음 Windows를 실행하는 데 필요한 "필수적인"서비스의 일부가 아닙니다. Windows 2008에서 소개되었습니다.

3

또 다른 솔루션은 서비스 시작 논리 중에 COM 개체를 초기화하지 않는 것입니다. 시작 로직이 별도의 작업자 스레드 또는 최소한 지연된/대기중인 요청을 자체 생성하므로 COM 초기화는 SCM이 해제되어 필요에 따라 다른 서비스를 시작할 수 있습니다.

+0

서비스 시작에는 실제로 아무것도 포함되어 있지 않아야합니다. 같은 방식으로'DllMain'은 대부분의 시스템 호출을 피해야합니다. –

+0

그렇습니다. 솔루션을 구현하지 못했던 해결책이 아니 었습니다. 나는 서비스가 시작되지 않는 것을 좋아했다. 서비스가 성공적으로 시작되었지만 멈춘다. 그러나 이것은 명백히 불가능합니다. –

+0

서비스 의존도를 처리해야하는 경우가 아니라 –