반응형

안녕하세요 : )

서버측 소프트웨어를 작성하다 보면, 서비스에 대한 제어가 필요한 경우가 많습니다. VS.Net의 경우 시스템에 존재하는 서비스에 접근할 수 있는 코드를 쉽게 만들 수 있습니다.

그럼 시작합니다 : )

서버 탐색기

    

VS.Net을 사용하고 있고, 서버측 애플리케이션 작성을 많이 하고 있다면, 아마 서버 탐색기 탭을 많이 사용하고 있을 것이다. SQL Server 아이콘에서 Drag'n Drop 만으로 SqlCommand 개체를 생성할 수 있다는 것 정도는 아마 알고 있겠지만, 서비스에 대한 접근도 가능하다는 것은 알고 있는가?

    

MSSQLSERVER 서비스 아이콘을 끌어서 폼 위에 놓으면 serviceController1 개체가 생성된다. 그리고 다음과 같이 버튼을 하나 배치해보자 :

     

 

이렇게 해 놓으면 사용할 준비는 끝났다. 다음과 같이 코딩해보자 :

private void button1_Click(object sender, System.EventArgs e)

{

    DialogResult result;

    switch(serviceController1.Status)

    {

        case System.ServiceProcess.ServiceControllerStatus.Stopped:

            result = MessageBox.Show(

                string.Format("{0} 서비스가 중지되어 있습니다. 시작하시겠습니까?", serviceController1.ServiceName),

                "서비스 중지",

                MessageBoxButtons.YesNo);

            if(result == DialogResult.Yes)

                serviceController1.Start();

            break;

        case System.ServiceProcess.ServiceControllerStatus.Running:

            result = MessageBox.Show(

                string.Format("{0} 서비스가 실행중입니다. 중지하시겠습니까?", serviceController1.ServiceName),

                "서비스 실행",

                MessageBoxButtons.YesNo);

            if(result == DialogResult.Yes)

                serviceController1.Stop();

            break;

    }

}

 

private void Form_Service_Load(object sender, System.EventArgs e)

{

    this.button1.Enabled = true;

    switch(serviceController1.Status)

    {

        case System.ServiceProcess.ServiceControllerStatus.Stopped:

            this.button1.Text =

                string.Format("{0} 서비스 시작", serviceController1.ServiceName);

            break;

        case System.ServiceProcess.ServiceControllerStatus.Running:

            this.button1.Text =

                string.Format("{0} 서비스 중지", serviceController1.ServiceName);

            break;

        default:

            this.button1.Enabled = false;

            break;

    }

}

코드 자체는 어렵지 않으므로 쉽게 이해할 수 있으리라 생각한다. 프로그램을 실행시키면 다음과 같은 폼이 나타난다 :

이런 식으로 서비스의 현재 상태를 체크할 수 있고, 시작/중지/일시 정지 등의 기능을 수행할 수 있으며, 서비스에서 미리 정의되어 있는 명령이 있다면 ExecuteCommand() 메서드를 사용해서 정의된 명령을 내릴 수도 있다.

정리

여러 서버의 서비스를 동시에 제어해야 한다거나, 원격에 있는 서비스를 제어하는 등 응용 가능성은 남겨놓도록 하겠습니다.

그럼 : )


  작성자 : 이수겸(Kenial),MS Visual C# MVP
  이메일 : keniallee@msn.com
  홈페이지 : www.kenial.net


반응형

+ Recent posts