'SCM'에 해당되는 글 1건
- 2008.12.02 Windows 서비스 프로그램 시작하기 2
일반적인 경우 별로 사용할 일은 없지만..
가끔가다 내가 만든 프로그램이 돌아가기 위해 필수적으로 실행중이어야 할 서비스가 실행중이 아닐 경우가 있습니다. 그렇다면 별수없이.. 실행시켜줘야죠 ^^;
Windows에서 서비스들은 SCM(Service Control Manager)이라는 녀석에 의해 관리됩니다. 당연히 이녀석을 제어하는 API도 존재하죠.
다음과 같이 코딩하면 특정 윈도우 서비스를 실행할 수 있습니다.
BOOL MyStartService(LPCTSTR tszServiceName) { BOOL bRet = TRUE; // Open SCM SC_HANDLE schSCManager = NULL; schSCManager = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS); if (schSCManager == NULL) { bRet = FALSE; goto cleanup; } // Open Service SC_HANDLE schService = NULL; schService = OpenService(schSCManager, tszServiceName, SERVICE_ALL_ACCESS); if (schService == NULL) { bRet = FALSE; goto cleanup; } // Change Service Type if (!ChangeServiceConfig(schService, SERVICE_NO_CHANGE, SERVICE_AUTO_START, SERVICE_NO_CHANGE, NULL, NULL, NULL, NULL, NULL, NULL, NULL)) { bRet = FALSE; goto cleanup; } // Start Service if (!StartService(schService, 0, NULL)) { bRet = FALSE; goto cleanup; } cleanup: CloseServiceHandle(schService); CloseServiceHandle(schSCManager); return bRet; }
실행하려면.. 인자로 서비스명을 지정하시면 되겠네요.
MyStartService(_T("winmgmt"))