'SCM'에 해당되는 글 1

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

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

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

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

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"))