| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 템플릿 함수화
- 전위
- Basic
- SCM
- linked list
- 트리
- 연결 리스트
- 비트코인
- 후위
- BST
- 기초
- 알고리즘
- 숫자
- 이진 탐색 트리
- #선물 #비트코인#알트코인#매매#코인#마진
- C++
- 선물
- 순회
- 오버로딩
- trading view
- 자료구조
- 바이낸스
- Python
- 문자열
- template
- mutable
- Tree
- Windows
- Data Structure
- array
- Today
- Total
Project Hub
2. ServiceApp 구현 및 서비스 실행 본문
SCM 으로 서비스에 등록 할 ServiceApp을 구현하였다.
구현 중에 발생한 문제
구현 시, 테스트를 위해 windows event 객체를 생성하였는데 처음에는 ServiceApp에서 CreateEvent 를 하였다.
하지만, 원인은 모르지만 SCM에서 해당 이벤트 객체를 signal 상태로 변경하기 위해 OpenEvent를 하였는데
액세스 거부 에러가 발생하였다.
그래서 SCM 시작 시, Global 이벤트 객체를 생성하고, 그 후에 ServiceApp 에서 접근하도록 변경하였고 의도하는 동작대로 수행되었다.
ServiceApp class의 기본 구조
#pragma once
#include <stdio.h>
#include <Windows.h>
#define SERVICE_NAME L"Safy"
#define EVENT_NAME L"Global\\SAFY"
class CServiceApp
{
public:
CServiceApp();
virtual ~CServiceApp();
public:
static void WINAPI ServiceMain(DWORD argc, LPTSTR argv[]);
static void WINAPI ControlNTService(DWORD dwCtrlCode);
static BOOL InitService();
static BOOL ExitService();
static BOOL ReportStatusToSCMgr(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint);
static int ServiceSpecific(int argc, LPTSTR argv[]);
DWORD Run();
};
테스트 수행 과정
- ServiceApp.exe 파일 생성 (ServiceApp 프로젝트 빌드)
- SCM 을 통해 'Safy' 라는 이름의 서비스를 등록 (서비스로 등록 할 프로세스 지정 - ServiceApp 경로/ServiceApp.exe)
- SCM 을 통해 서비스 시작
- ServiceApp.exe 실행되며 해당 앱의 Main에서 WaitForSingleObject를 통해 SetEvent 호출을 기다리도록 함.
- SCM 에서 SetEvent를 통해 종료 시그널 알리고 서비스 종료.
테스트 확인 내용
- services.msc 를 통해 서비스로 등록된 Safy 확인


- 등록 후, 서비스 시작 시 실행된 ServiceApp.exe

정리
- 서비스 등록과 실행, 종료까지 테스트를 수행하였다.
- 서비스의 속성을 수정하여 강제 종료 방지, 부팅 시 자동 실행 등 설정 가능하다. (해당 내용들은 추후에 조사 후 적용..)
'Windows > Windows Service' 카테고리의 다른 글
| 1. 서비스 제어 관리자 (SCM : Service Control Manager) 구현 (4) | 2022.07.16 |
|---|