c++ 서비스 프로그램 예제

Windows NT: 자격 증명이 없고 null 세션을 사용하여 연결해야 하기 때문에 서비스에는 공유 및 파이프와 같은 네트워크 리소스에 대한 액세스가 제한되어 있습니다. 다음 레지스트리 키에는 NullSessionPipes 및 NullSessionShares 값이 포함되어 있으며, 이 값은 null 세션이 연결할 수 있는 파이프와 공유를 지정하는 데 사용됩니다. 여기에서 서비스를 시작하고 중지할 수 있습니다. 플랫폼 SDK에는 설치된 서비스의 데이터베이스를 쿼리하거나 수정하는 데 사용할 수 있는 명령줄 유틸리티 sc.exe가 포함되어 있습니다. 해당 명령은 SCM에서 제공하는 함수에 해당합니다. 구문은 원래 디자인에서 TConsoleService는 로깅 시스템이 하드 코딩된 순수 클래스였습니다. 즉, 로그 파일이 자동으로 생성됩니다. 그러나 클래스 사용 시나리오가 발전함에 따라 특정 서비스에는 로그 파일이 필요하지 않았습니다. 빈 파일을 만드는 것조차 허용되지 않았습니다. 따라서 사용자가 로그 파일을 만들지 여부를 지정할 수 있는 디자인이 변경되었습니다(생성자 인수). 로깅이 여전히 미리 설정된 매체로 제한되었기 때문에 이 것조차도 부족한 것으로 나타났습니다. 결국이 패턴이 추상화되었고 서비스 프레임 워크는 필요한 로깅 패턴을 템플릿 인수로 지정할 수 있도록 템플릿 클래스로 설계되었습니다.

다음은 C++의 템플릿 기능이 코드 재사용에 대한 효율적인 접근 방식을 제공하는 방법을 보여 주는 또 다른 예입니다. 따라서 위에서 언급 한 예제를 사용하기가 너무 어렵다는 것을 알았기 때문에 모든 서비스 통신을 감싸는 자체 C ++ 클래스를 만들었으며 사용하기가 훨씬 쉽다고 생각합니다. 기본 사용법은 다음과 같이 발생합니다: 클래스 서비스의 고유한 하위 클래스를 정의하고 응용 프로그램 논리를 중지하는 방법과 시작하는 방법을 아는 가상 메서드를 사용합니다. 그런 다음 wmain() 에서 이 클래스의 인스턴스를 만들고(실제로 는 싱글톤) 메서드 run()을 호출하고 완료될 때까지 기다립니다. 그게 다야, 다른 모든 것을 돌봐가져옵니다. OpenService() 또는 CreateService() 함수를 사용하여 서비스 개체에 대한 핸들을 가져옵니다. 또한 SCM에 등록된 후 서비스 인스턴스를 참조하는 데 사용되는 SERVICE_STATUS_HANDLE이 필요합니다. 서비스 제어 처리기가 서비스 기본 진입점에 등록되었습니다. 각 서비스에는 SCM의 제어 요청을 처리하는 처리기가 있어야 합니다. 제어 처리기는 30초 이내에 반환해야 하거나 SCM에서 서비스가 응답하지 않는다는 오류를 반환합니다. 이는 처리기가 SCM의 컨텍스트에서 호출되고 처리기에서 반환될 때까지 SCM을 보유하기 때문입니다. SCM은 CreateService() 함수에 의해 서비스를 설치할 때 서비스 개체의 보안 설명자가 만듭니다.

서비스 개체의 기본 보안 설명자는 다음 액세스 권한을 부여합니다.

Les commentaires sont fermés.