목록Windows (17)
Creative Motive
데브피아 까막 님 작성 (http://crowback.tistory.com/218) 지금 까지의 진행한 내용을 정리하면서...요번에 진행할 때는 좀 쓸만한 샘플을 제작해서 올려보려고 하였습니다. 하지만, 지금까지 사용한 샘플코드가 실무에 바로 적용할 수 있을 만큼제대로 정리가 되지 못했더군요. 플젝만 복사해서 필요할 때 바로 사용할 수 있을 정도의 기본적인 정리를 하고 다음 순서를 진행하고자, 이번 장에서는 사용된 코드를 정리만 하고 넘기도록 하겠습니다. ^^;;;(참고로 말씀드리면, VS 6.0과 VS2008 로 테스트 되었으며, 프로젝트도 해당 2가지 버전으로 빌드 가능하도록 구성되어 있습니다.)(그리고, 여전히 땡땡 거리는 서비스입니다. -_-;;;) 프로젝트의 구성...기본적인 서비스 골격을 가진..
데브피아 까막 님 작성 (http://crowback.tistory.com/217)지난 장에서는 서비스의 동작순서를 개략적으로 살펴보았습니다. 윈도우 2008 서버나, Vista 부터는 좀더 색다른시작 방식과 안정적인 종료를 지원한다는 것을 공부해 보았는데, 종료 플래그와 관련된 설정이 마무리 되지 않아정상적으로 종료가 되지를 않더군요. (물론 종료시 처리작업은 마무리가 된듯한...)서비스의 중지가 아닌, 머신 종료에 따른 서비스가 종료될 때는 다음과 같은 특징이 발견되었네요.1. SERVICE_CONTROL_SHUTDOWN 와 SERVICE_CONTROL_PRESHUTDOWN 에서 서비스가 정상적으로 종료되었음을 알리려면 작업이 끝난 뒤에 꼭, SERVICE_STOPPED 상태를 변경 시켜주어야 ..
데브피아 까막 님 작성 (http://crowback.tistory.com/216)서비스로 좀더 깊게 들어가기 이전에, 컴퓨터가 켜져서 꺼질때까지 서비스가 어떻게 동작하는지 알아보자.서비스는 OS에 따라 동작 순서와 특성에 따른 차이가 존재한다.Windows 2000 및 95, 98 등에 관해서는 다루지 않을 것이며, 최소 Windows XP 를 기준으로 다룬다.Windows XP와 Windows Server 2003은 _WIN32_WINNT 의 버전 표기가 0x0500 부터 시작한다.Windows Vista, Windiow 7, Windows 2008은 표기가 0x0600 부터 시작한다.이렇게 두가지로 나누어서 동작을 살펴보고자 한다. XP나 2003을 구형 OS, 그 이상을 신형 OS 라고 표기할것이..
데브피아 까막 님 작성 (http://crowback.tistory.com/215)지난장에서는 SERVICE_CONTROL_SESSIONCHANGE 를 받아서, 어떠한 이벤트가 떨어지는지 그리고 그러한 정보를 추출해서 필요한 로그를 남기는 작업을 진행하여 보았다.그렇다면, 이번에는 누군가 컴퓨터에 로그인을 하면, 해당 정보를 출력해주는 환영인사를 남겨보자.아래 그림은 MessageBox.exe 라는 유틸성 다이알로그를 하나 만들어 놓고, 사용자가 로그인을 하면 해당 정보를추출하여, 메시지 박스를 띄워 주도록 구성되었다.동작을 그려보면 다음과 같다.대충 보면, 윈도우 시작프로그램에 MessageBox.exe를 등록해 놓고 뿌려주는것과 기능은 같다고 할 수 있겠지만실제로 구현하는 레벨이 좀 다르다. 아무튼 ..
데브피아 까막 님 작성 (http://crowback.tistory.com/213)이번에는 서비스 메인에 등록된 이벤트 핸들러에 대하여 진행해 보고자 한다. 서비스에서 제공 받을 수 있는 이벤트의 목록은 다음과 같다.#define SERVICE_CONTROL_STOP 0x00000001#define SERVICE_CONTROL_PAUSE 0x00000002#define SERVICE_CONTROL_CONTINUE 0x00000003#define SERVICE_CONTROL_INTERROGATE 0x00000004#define SERVICE_CONTROL_SHUTDOWN 0x..
데브피아 까막 님 작성 (http://crowback.tistory.com/212)6장에서 서비스의 본문을 작성할 때 IsServiceMode() 라는 유틸성 함수를 이용하여, 비주얼 스튜디오에서 서비스 메인을 SCM에 등록하지 않고, 서비스 메인을 직접 호출하는 방식으로 콘솔 응용 프로그램 처럼 디버깅하는 방법을 제시하였다.작업을 진행할 때 가장 빠르고, 편안하게 디버깅을 할 수 있기 때문에 동작 테스트는 거의 위 방식으로 진행을 한다.하지만 실제로 서비스로 구동중이지 않으므로, 서비스의 이벤트를 제공받거나 하는 등의 테스트는 불가능하다. 기본적인 동작 테스트가 마친 상태에서 서비스로 등록하여 놓고, 구동 중인 상태에서의 디버깅 방법을 살펴본다면,이미 아시는 분들도 계시겠지만, MSVS는 Process..
데브피아 까막 님 작성 (http://crowback.tistory.com/211)이전 장에서 다룬 서비스 본체 코딩이라고 한 부분은 유틸성 클래스를 이용하여, 본체를 구성하여 보았다.다음 주제로 넘어가기 이전에, 잡다한거 다 제거하고 순수하게.. API 만으로 작성한 코드를 살펴보면서 차이점이 무엇인지? 구지 저런거 다 넣고 진행할 필요가 있는지. 급할 때는 기본 코드만으로 쓱~~ ^^;;;아래의 코드는 이전 샘플과 거의 동일한 기능을 제공한다. 그리고, 실제로도 대부분 저렇게 구성하는 경우가 많다. #include windows.h>#include winsvc.h>#define SRVNAME "CROWBACK Service"SERVICE_STATUS_HANDLE hss = NULL;SERVICE_ST..
데브피아 까막 님 작성 (http://crowback.tistory.com/209)이번 장에서는 실제로 서비스 프로그램이 어떻게 구성되어 있는지 간단한 샘플을 이용하여 살펴보고자 한다.샘플에 구현된 기능은 다음과 같다.1. 설치/제거2. 시작/중지/일시중지/재시작3. 설치시 각종 파라미터 설정4. 디버깅을 위한 간단한 조작5. 전체 서비스 프로그램의 흐름6. 기능은 지난 서비스 설명시 잠깐 나온 땡땡거리는 서비스를 기반으로 한다.소스의 구성 품목은 다음과 같다.1. main.cpp 서비스 구조를 가진 소스2. ServiceUtil.h / cpp 서비스를 개발할 때 간혹 쓸모있는 함수 모음 클래스3. ServiceMgr.h / cpp 서비스의 설치나 동작을 제어하는 기능을 가진 모음 클래스아래는 접어놓은..