'SCM'에 해당되는 글 1건
- 2008.12.02 Windows 서비스 프로그램 시작하기 2
일반적인 경우 별로 사용할 일은 없지만..
가끔가다 내가 만든 프로그램이 돌아가기 위해 필수적으로 실행중이어야 할 서비스가 실행중이 아닐 경우가 있습니다. 그렇다면 별수없이.. 실행시켜줘야죠 ^^;
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"
))