아래는 Windows Printer Spooler ( spooler ) 서비스 시작 중지 예제 입니다.
if (bResult == TRUE) {
StopSpooler();
Sleep(2000);
StartSpooler();
}
BOOL StopSpooler() {
SC_HANDLE schService;
SC_HANDLE schSCManager;
// Machine NULL=local , database NULL= default
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if (!schSCManager) {
Log(L"%s OpenSCMManager 함수 호출이 실패 하였습니다. GetLastError=%d", __FUNCTIONW__, GetLastError());
return FALSE;
}
schService = OpenService(schSCManager, L"spooler", SERVICE_STOP | SERVICE_QUERY_STATUS);
BOOL bRet = FALSE;
if (schService) {
SERVICE_STATUS ssStatus;
if (ControlService(schService, SERVICE_CONTROL_STOP, &ssStatus)) {
Sleep(500);
while (QueryServiceStatus(schService, &ssStatus)) {
if (ssStatus.dwCurrentState == SERVICE_STOP_PENDING)
Sleep(1000);
else if (ssStatus.dwCurrentState == SERVICE_STOPPED) {
bRet = TRUE;
break;
}
else {
Log(L"%s 서비스 상태를 확인 할 수 없습니다. 상태코드=%d", __FUNCTIONW__, ssStatus.dwCurrentState);
break;
}
}
}
else
Log(L"%s ControlService 함수 호출이 실패 하였습니다.. GetLastError=%d", __FUNCTIONW__, GetLastError());
CloseServiceHandle(schService);
}
else
Log(L"%s OpenService 함수 호출이 실패 하였습니다.. GetLastError=%d", __FUNCTIONW__, GetLastError());
CloseServiceHandle(schSCManager);
return bRet;
}
BOOL StartSpooler() {
SC_HANDLE schService;
SC_HANDLE schSCManager;
// Machine NULL=local , database NULL= default
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if (!schSCManager) {
Log(L"%s OpenSCMManager 함수 호출이 실패 하였습니다. GetLastError=%d", __FUNCTIONW__, GetLastError());
return FALSE;
}
schService = OpenService(schSCManager, L"spooler", SERVICE_START | SERVICE_QUERY_STATUS);
if (schService) {
SERVICE_STATUS ssStatus;
if (StartService(schService , 0 , NULL) ) {
Sleep(500);
while (QueryServiceStatus(schService, &ssStatus)) {
if (ssStatus.dwCurrentState == SERVICE_RUNNING)
break;
else if (ssStatus.dwCurrentState == SERVICE_START_PENDING) {
Sleep(1000);
break;
}
else {
Log(L"%s 서비스 상태를 확인 할 수 없습니다. 상태코드=%d", __FUNCTIONW__, ssStatus.dwCurrentState);
break;
}
}
}
else
Log(L"%s ControlService 함수 호출이 실패 하였습니다.. GetLastError=%d", __FUNCTIONW__, GetLastError());
CloseServiceHandle(schService);
}
else
Log(L"%s OpenService 함수 호출이 실패 하였습니다.. GetLastError=%d", __FUNCTIONW__, GetLastError());
CloseServiceHandle(schSCManager);
return TRUE;
}
'C++ > MFC' 카테고리의 다른 글
RegOpenKeyEx 32bit 응용프로그램에서 64bit Registry 접근 예제 (0) | 2023.06.22 |
---|---|
[MFC] WAS서버에 POST 파라미터 전송 시에 한글 깨짐으로 인하여 URLEncode 처리 구현 테스트 진행 (0) | 2023.03.02 |
SHGetKnownFolderPath 함수 사용시에 바이러스로 인식되는 현상 (0) | 2022.10.26 |
C++에서 COM , COM+ 메서드 호출 예제 (0) | 2021.02.07 |
컴파일시에 winmain.cpp 파일에 if (!pThread->InitInstance()) 에러 발생시 조치 방안 (0) | 2018.12.13 |