현재 자신이 서비스 모드로 실행되었는지 콘솔모드로 실행되었는지 확인하는 방법


테스트 환경 :

Visual Studio 2008, Windows 7 32bit


테스트 코드 : 

확인방법1. 현재 프로그램 실행 디렉토리 확인

#include <direct.h>

char buffer[MAX_PATH] = {0};

_getcwd(buffer, MAX_PATH);

로깅(buffer)

확인방법2. GetStdHandle() 이용하여 standard handle 보유 여부 확인

HANDLE handle = GetStdHandle(STD_INPUT_HANDLE);

if (handle == NULL) { // NULL 인 경우 서비스 실행

로깅 ( "is service mode!!" )

} else {

로깅 ( "is console mode!!" )

}

결과값 :

확인방법1.

콘솔로 실행시 : 실제 .exe 위치한  디렉토리 출력됨 (ex. d:\application)

서비스로 실행시 : C:\Windows\system32

확인방법2.

콘솔로 실행시 : "is console mode!!" 출력 됨

서비스로 실행시 : "is service mode!!" 출력 됨

결론 : 

확인방법2. GetStdHandle(STD_INPUT_HANDLE) 의 리턴이 NULL 인경우 서비스 실행으로 인식하는 방법 사용.




'C++' 카테고리의 다른 글

MFC, GDI  (0) 2012.04.06
WTL : Windows Template Library  (0) 2012.04.06
log4cxx warning 관련 C4275  (0) 2012.04.06
OTL 샘플  (0) 2012.04.06
strsafe.h  (0) 2012.03.24
openssl + AES256 + Base64  (0) 2012.03.11
UTF-8 변환 (UTF8Conv.h)  (0) 2012.03.10
#pragma message 를 활용한 할일 적어두기  (0) 2012.03.07