다음을 통해 공유


StartServiceCtrlDispatcherA 함수(winsvc.h)

서비스 프로세스의 주 스레드를 서비스 제어 관리자에 연결하여 스레드가 호출 프로세스의 서비스 제어 디스패처 스레드가 됩니다.

통사론

BOOL StartServiceCtrlDispatcherA(
  [in] const SERVICE_TABLE_ENTRYA *lpServiceStartTable
);

매개 변수

[in] lpServiceStartTable

호출 프로세스에서 실행할 수 있는 각 서비스에 대해 하나의 항목을 포함하는 SERVICE_TABLE_ENTRY 구조의 배열에 대한 포인터입니다. 테이블의 마지막 항목 멤버는 테이블의 끝을 지정하려면 NULL 값이 있어야 합니다.

반환 값

함수가 성공하면 반환 값은 0이 아닌 값입니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 얻으려면 GetLastError호출합니다.

서비스 제어 관리자가 다음 오류 코드를 설정할 수 있습니다. 다른 오류 코드는 서비스 제어 관리자가 호출하는 레지스트리 함수에서 설정할 수 있습니다.

반환 코드 묘사
ERROR_FAILED_SERVICE_CONTROLLER_CONNECT
이 오류는 프로그램이 서비스가 아닌 콘솔 애플리케이션으로 실행되는 경우 반환됩니다.

프로그램이 디버깅을 위해 콘솔 애플리케이션으로 실행되는 경우 이 오류가 반환될 때 서비스별 코드가 호출되지 않도록 구성합니다.

ERROR_INVALID_DATA
지정된 디스패치 테이블에는 적절한 형식이 아닌 항목이 포함되어 있습니다.
ERROR_SERVICE_ALREADY_RUNNING
프로세스는 이미 StartServiceCtrlDispatcher호출했습니다. 각 프로세스는 한 번만 StartServiceCtrlDispatcher를 호출할 수 있습니다.

발언

서비스 제어 관리자가 서비스 프로세스를 시작하면 프로세스가 StartServiceCtrlDispatcher 함수를 호출할 때까지 기다립니다. 서비스 프로세스의 주 스레드는 시작 후(30초 이내) 가능한 한 빨리 이 호출을 수행해야 합니다. StartServiceCtrlDispatcher 성공하면 호출 스레드를 서비스 제어 관리자에 연결하고 프로세스에서 실행 중인 모든 서비스가 SERVICE_STOPPED 상태가 될 때까지 반환되지 않습니다. 서비스 제어 관리자는 이 연결을 사용하여 제어 및 서비스 시작 요청을 서비스 프로세스의 주 스레드로 보냅니다. 주 스레드는 컨트롤 요청을 처리하기 위해 적절한 HandlerEx 함수를 호출하거나 새 서비스가 시작될 때 적절한 ServiceMain 함수를 실행하는 새 스레드를 만들어 디스패처 역할을 합니다.

lpServiceTable 매개 변수에는 호출 프로세스에서 실행할 수 있는 각 서비스에 대한 항목이 포함되어 있습니다. 각 항목은 해당 서비스에 대한 ServiceMain 함수를 지정합니다. SERVICE_WIN32_SHARE_PROCESS 서비스의 경우 각 항목에 서비스 이름이 포함되어야 합니다. 이 이름은 서비스가 설치되었을 때 CreateService 함수에서 지정한 서비스 이름입니다. SERVICE_WIN32_OWN_PROCESS 서비스의 경우 테이블 항목의 서비스 이름은 무시됩니다.

서비스가 자체 프로세스에서 실행되는 경우 서비스 프로세스의 주 스레드는 즉시 StartServiceCtrlDispatcher호출해야 합니다. 모든 초기화 작업은 서비스가 시작될 때 서비스의 ServiceMain 함수에서 수행됩니다.

여러 서비스가 프로세스를 공유하고 ServiceMain 함수가 호출되기 전에 몇 가지 일반적인 프로세스 차원의 초기화를 수행해야 하는 경우 주 스레드는 30초 미만이 걸리는 한 StartServiceCtrlDispatcher호출하기 전에 작업을 수행할 수 있습니다. 그렇지 않으면 프로세스 차원의 초기화를 수행하려면 다른 스레드를 만들어야 합니다. 반면 주 스레드는 StartServiceCtrlDispatcher를 호출하고 서비스 제어 디스패처가 . 모든 서비스별 초기화는 개별 서비스 주 함수에서 계속 수행되어야 합니다.

서비스는 사용자 인터페이스를 직접 표시하려고 시도해서는 안 됩니다. 자세한 내용은 Interactive Services참조하세요.

예제

예를 들어 서비스 프로그램의 Main 함수작성을 참조하세요.

메모

winsvc.h 헤더는 STARTServiceCtrlDispatcher를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한 규칙을 참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winsvc.h(Windows.h 포함)
라이브러리 Advapi32.lib
DLL Advapi32.dll

참고 항목

ControlService

HandlerEx

SERVICE_TABLE_ENTRY

서비스 진입점

Service Functions

serviceMain