ManagementObjectSearcher Process monitoring


참조 URL
  1. Windows Management Instrumentation ( WMI )
  2. WMI .NET 개요
  3. WMI 스크립팅 입문
  4. ManagementObjectSearcher class
  5. ManagementEventWatcher class
  6. ManagementScope class
  7. SelectQuery class
  8. ObjectQueryObjectQuery<T>

 

 이 포스트에 있는 내용이 언제나 확실한 정답은 아닙니다. 진실이라고 생각해 왔던 전제가 시간의 지남에 따라 들어나지 않았던 다른 이면 때문에 좋은 방향으로 이끌어 낼 수 있는 역할로 변환 되는게 역사적으로도 많은 증명 있었습니다. 그렇지만 저는 현재 상황에서 최선의 답을 찾고자 노력하였으며 이 글을 읽는 다른 분들에게 다음 길을 갈 수 있도록 도와주는 디딤돌이 되고자 노력하고자 포스팅을 통해 공유하고자 하는 것입니다. 그리고 프로그래머라는 타이틀을 달고 살아야 한다면 "왜"라는 의문을 항상 가지고 다니면서 자신의 위치에 안주하지 않고 항상 노력하는 모습으로 살아 가고자 합니다. 언제든 지적이나 오류가 있으면 피드백 부탁 드리겠습니다.

ing™       


 윈도우 서비스나 데스크탑 프로그램을 개발하다 보면 실행되고 있는 프로세스를 검사하여 체크해야 하는 경우가 있었을 것이다. 다른 방법도 있겠지만 이번 포스트에서는 WMI를 이용해서 알아내는 방법을 살펴 보기로 하겠다. 아래와 같은 코드를 통해서 특정 프로세스의 상태에 대해서 조회를 할 수 있다.

// 모니터링 하고자 하는 프로세스 명 string monitoringProcessName = "notepad.exe"; // 실행할 쿼리를 구성한다. string queryString = "SELECT Name, ProcessId, Caption, ExecutablePath FROM Win32_Process WHERE Name = '" + monitoringProcessName + "'"; // 쿼리 생성 SelectQuery query = new SelectQuery(queryString); // 관리 작업의 범위  ManagementScope scope = new ManagementScope(@"\\.\root\CIMV2"); // 관리 객체의 컬렉션 검색자 ManagementObjectSearcher searcher = new ManagementObjectSearcher(scopequery); // WMI를 통해 검색된 다른 관리 개체 컬렉션 ManagementObjectCollection processes = searcher.Get(); foreach (ManagementObject process in processes) {     Console.WriteLine("ProcessId : {0}, Program Name : {1}"Convert.ToInt32(process["ProcessId"]), process["Name"].ToString()); }

[코드1] 프로세스 조회


 이와 같이 실행하였을 때 노트패드가 실행되어 있다면 ProcessId와 프로그램명을 출력해 줄 것이다.



소스 코드 자체에 주석과 직관적인 코딩으로 충분히 파악이 가능할 것으로 예상하므로 별도의 설명을 생략하도록 하겠습니다. 포스트의 내용이 장황한 설명 보다는 주석과 소스코드 자체 만으로도 이해할 수 있도록 하기 위해 노력하였습니다. 실 개발에서도 적용할 수 있도록 간단하면서도 현실적인 예제 프로그램을 통해 각 소스를 만들고 이해 시키고자 하였으며 실무에 필요한 개발요구 사항들을 해결 하는데 도움이 되고자 노력하였습니다. 그리고 소스와 같이 있는 주석을 이용해 nDoc이나 별도의 자동 Document 제작 유틸로 API 문서를 만드는 데에도 도움이 되었으면 한다. 
※ DOC에 대한 프로그램 정보 Util link

ing™       



+ Recent posts