닷넷에서 윈도우 서비스 제어하기 ; ServiceController
닷 넷에서는 서비스 서버 컨트롤을 시각적으로 제공하고, System.ServiceProcess.ServiceController 개체를 통해서 서비스에 액세스할 수 있는 수단을 제공하고 있습니다. 이 ServiceController 개체의 간단한 사용법에 대하여 알아보겠습니다.
안녕하세요 : )
서버측 소프트웨어를 작성하다 보면, 서비스에 대한 제어가 필요한 경우가 많습니다. 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() 메서드를 사용해서 정의된 명령을 내릴 수도 있다.
정리
여러 서버의 서비스를 동시에 제어해야 한다거나, 원격에 있는 서비스를 제어하는 등 응용 가능성은 남겨놓도록 하겠습니다.
그럼 : )
'TechLog' 카테고리의 다른 글
아이팟 터치, 아이폰을 외장 디스크로 사용하기 (0) | 2008.11.27 |
---|---|
맥과 윈도우의 외장하드 공유 (0) | 2008.11.26 |
Microsoft BI Demo VPC 5.1 (0) | 2008.11.19 |
닷넷에서 디버그 출력을 파일로 저장하기 (0) | 2008.11.12 |
웹 서비스 팁 ; 세션 사용하기, 함수의 설명 제공하기 (0) | 2008.11.04 |