[ WIN32 API ] 윈도우 서비스 중지 에러 발생시 용-ILE/LNAG-C/C++2008. 5. 15. 20:06
2007 05 fs
서비스 등록 프로그램 중 중지 했지만 중지 되지 않고 서비스에서도 중지중이고 제거 되지 않을 경우
아래와같이 주먹구구식으로 프로세스 죽이는 소스 를 넣는다.
~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void MySetStatus_Pending(DWORD dwState, DWORD dwAccept)
{
SERVICE_STATUS ss;
ss.dwServiceType=SERVICE_WIN32_OWN_PROCESS;
ss.dwCurrentState=dwState;
ss.dwControlsAccepted=dwAccept;
ss.dwWin32ExitCode=0;
ss.dwServiceSpecificExitCode=0;
ss.dwCheckPoint=0;
ss.dwWaitHint=0;
// 현재 상태를 보관해 둔다.
g_NowState=dwState;
SetServiceStatus(g_hSrv,&ss);
}
~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
case SERVICE_CONTROL_STOP:
SC_HANDLE hScm, hSrv;
SERVICE_STATUS ss;
MySetStatus_Pending( SERVICE_CONTROL_STOP, 0);
// SCM을 연다
hScm=OpenSCManager(NULL,NULL, SC_MANAGER_CREATE_SERVICE );
hSrv = OpenService( hScm, "SERVICE_NAME", SERVICE_ALL_ACCESS );
QueryServiceStatus(hSrv,&ss);
if (ss.dwCurrentState != SERVICE_STOPPED) {
//프로세스 종료
ControlService(hSrv,SERVICE_CONTROL_STOP,&ss);
//또는 SERVICE_STOP_PENDING값을 이용하여 죽을때가지 기다려본다.
Sleep(2000);
}
break;
~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~