ServiceController
네임 스페이스 : System.ServiceProcess (System.ServiceProcess.dll 임포트해야)
개인적으로 만드는 프로그램 중, 필수적인 서비스 (Database 등)가 실행중인지 아닌지 확인할때까 있습니다.
이럴때 해당 서비스를 연결하거나 서비스 관련정보를 가져올때
ServiceController라는 클래스가 존재한다는 걸 알게되었습니다.
일단 msdn의 내용을 일부 가져왔습니다. (링크)
속성
이름 |
내용 |
CanPauseAndContinue |
서비스를 일시 중지했다가 다시 시작할 수 있는지를 나타내는 값을 가져옵니다. |
CanShutdown |
시스템을 종료할 때 서비스에 알릴지를 나타내는 값을 가져옵니다. |
CanStop |
시작한 서비스를 중지할 수 있는지의 여부를 나타내는 값을 가져옵니다. |
DependentServices |
이 연결 된 서비스에 종속 된 서비스의 집합을 가져옵니다 ServiceController 인스턴스. |
MachineName |
이 서비스가 상주하는 컴퓨터의 이름을 가져오거나 설정합니다. |
ServiceName |
이 인스턴스가 참조하는 서비스를 식별하는 이름을 가져오거나 설정합니다. |
Status |
이 인스턴스에서 참조하는 서비스 상태를 가져옵니다. |
메소드
이름 |
내용 |
Close() |
연결을 끊고 ServiceController 서비스에서 인스턴스를 해당 인스턴스가 할당 하는 모든 리소스를 해제 합니다. |
Continue() |
일시 중지한 서비스를 계속합니다. |
GetServices() |
로컬 컴퓨터에서 장치 드라이버 서비스를 제외한 모든 서비스를 검색합니다. |
Pause() |
서비스 작업을 일시 중단합니다. |
Start() |
인수를 전달하지 않고 서비스를 시작합니다. |
Start(String[]) |
지정된 인수를 전달하면서 서비스를 시작합니다. |
Stop() |
이 서비스와 이 서비스에 종속되는 서비스를 중지합니다. |
등 등
저는 개인적으로 database 인스턴스가 살아있는지의 확인용으로 썼습니다.
근데 이상하게 Service Start를 못하는것도 존재하던데 그 이유를 잘 모르겠네요...
ex) 해당 Service가 살아있는지 확인하는 내용. (namespace는 제외했습니다
static void Main(string[] args) {
string svcNm = "MSSQLSERVER"; // 확인할 서비스명
// 해당서비스가 살아있는지 아닌지 확인하는 메소드
if(IsRunningMSSQL(svcNm)) {
Console.WriteLine("Service Alive.");
} else {
Console.WriteLine("Service Dead.");
}
Console.ReadLine();
}
static bool IsRunningMSSQL(string svcNm) {
bool ret = true;
ServiceController sc = new ServiceController(svcNm);
//해당 서비스의 일부 속성 출력
Console.WriteLine("Can Pause & Continue: "+ sc.CanPauseAndContinue);
Console.WriteLine("Can Shutdown: "+sc.CanShutdown);
Console.WriteLine("Can Stop="+sc.CanStop);
//해당 서비스가 살아있는가
if (sc.Status != ServiceControllerStatus.Running) { // 서비스 상태관련된 Status값으로 실행중 여부 확인
if(sc.Status == ServiceControllerStatus.Stopped) {
try {
sc.Start(); //제가 많이 몰라서그런데, 시작못하는 서비스의 경우있어서, try~catch로 묶어놨습니다.
} catch {
Console.WriteLine("서비스 {0} Start에 실패함", sc.ServiceName);
}
}
Thread.Sleep(2000); //필요는없지만 간혹 시작시 시간이 걸리는 서비스가 있을듯해서
if(sc.Status == ServiceControllerStatus.Running) {
ret=true;
} else {
ret=false;
}
}
return ret;
결과값
부족하지만, 필요한 부분만 적어놨습니다.
'프로그래밍&IT > C#' 카테고리의 다른 글
object의 DBNull처리 & List 마지막부터 가져오기 (0) | 2024.08.17 |
---|---|
[Visual Studio] 파일 선택하면 솔루션 탐색기에서 자동 이동하는 설정 (0) | 2021.01.03 |
[.Net C#] 열거형식, enum - 여러 상수 모아둘때 등 (0) | 2016.08.13 |
[.Net C#] 올림, 내림, 반올림 (Ceiling, Truncate, Round) (0) | 2016.01.20 |
[.Net C#] Datagridview에서 문자열 -> 숫자열 정렬하기 (8) | 2016.01.07 |