'SCM'에 해당되는 글 1

  1. 2008.12.02 Windows 서비스 프로그램 시작하기 2

Windows 서비스 프로그램 시작하기

CuveDev | 2008. 12. 2. 16:17 | 큐브씨

일반적인 경우 별로 사용할 일은 없지만..
가끔가다 내가 만든 프로그램이 돌아가기 위해 필수적으로 실행중이어야 할 서비스가 실행중이 아닐 경우가 있습니다. 그렇다면 별수없이.. 실행시켜줘야죠 ^^;

Windows에서 서비스들은 SCM(Service Control Manager)이라는 녀석에 의해 관리됩니다. 당연히 이녀석을 제어하는 API도 존재하죠.

다음과 같이 코딩하면 특정 윈도우 서비스를 실행할 수 있습니다.


01.BOOL MyStartService(LPCTSTR tszServiceName)
02.{
03.    BOOL bRet = TRUE;
04. 
05.    // Open SCM
06.    SC_HANDLE schSCManager = NULL; 
07.    schSCManager = OpenSCManager(NULL,
08.        SERVICES_ACTIVE_DATABASE,
09.        SC_MANAGER_ALL_ACCESS);
10.    if (schSCManager == NULL)
11.    {
12.        bRet = FALSE;
13.        goto cleanup;
14.    }
15. 
16.    // Open Service
17.    SC_HANDLE schService = NULL;
18.    schService = OpenService(schSCManager, tszServiceName,
19.        SERVICE_ALL_ACCESS);
20.    if (schService == NULL)
21.    {
22.        bRet = FALSE;
23.        goto cleanup;
24.    }
25. 
26.    // Change Service Type
27.    if (!ChangeServiceConfig(schService,
28.        SERVICE_NO_CHANGE,
29.        SERVICE_AUTO_START,
30.        SERVICE_NO_CHANGE,
31.        NULL, NULL, NULL, NULL, NULL, NULL, NULL))
32.    {
33.        bRet = FALSE;
34.        goto cleanup;
35.    }
36. 
37.    // Start Service
38.    if (!StartService(schService, 0, NULL))
39.    {
40.        bRet = FALSE;
41.        goto cleanup;
42.    }
43. 
44.cleanup:
45.    CloseServiceHandle(schService);
46.    CloseServiceHandle(schSCManager);
47. 
48.    return bRet;
49.}

실행하려면.. 인자로 서비스명을 지정하시면 되겠네요.


1.MyStartService(_T("winmgmt"))