2011-11-28 2 views
0

질문을 시작하는 과정에 반응 :여기에 호기심으로 태어난 종료

어떻게 프로세스가 현재 종료 될 때보고, 통지 또는 폴링되고 가겠어요?

내 응용 프로그램은 프로세스에서 "종료 시작"이벤트를 청취 할 수 있습니다. 예를 들어 특정 프로세스가 평균적으로 닫히는 시간을 추적 할 수 있습니까?

참고 : 이것은 kill 스위치를 내 프로세스와 함께 사용하지 않습니다. 이는 단순한 예일 수 있지만 내 응용 프로그램은 관찰자 역할 만합니다.

는 어떤 도움을 크게 감상 할 수있다 :)

답변

3

폴링없이이 작업을 수행 할 수있는 유일한 방법은 WMI를 사용하는 것입니다. 웹에는 많은 예제가 있습니다 (예 : Using WMI to monitor process creation, deletion and modification in .NET.

WMI는 .net 라이브러리로 잘 래핑됩니다. 예를 들어 위의 예제에서는 WMI 이벤트를 구독하기 위해 ManagementEventWatcher을 사용합니다. System.Management 네임 스페이스에는 WMI 장점에 대한 전체 보물이 있습니다.

+0

+1. 예, WMI에서 모두 노출 된 것을 완전히 잊었습니다. – Aliostad

+0

@Aliostad WMI, Windows의 잊혀진 보석 ...... –

0

나는 이것이 "푸시"작업을 (어떻게 든 엔딩 프로세스의 알림을 받으려면)이 될 수있는 방법이 있다면 정말 모르겠어요.

그러나이 관찰을 모방하기 위해 수행해야 할 작업은 지정된 간격 (예 : 2 초마다 또는 많은 대기 시간을 허용)으로 프로세스를 폴링하는 Windows 서비스를 만드는 것입니다. 그렇게하면 다른 프로세스가 끝나고 상황에 따라 처리 할 수 ​​있습니다.

var processes = System.Diagnostics.Process.GetProcesses(); 

내가 ProcessId 등을 사용 : 거기에 WIN32 API는 종료 된 프로세스의 이벤트에 가입하는 것입니다하지만 당신은 단순히 실행중인 프로세스의 목록을 얻어서 폴링을 할 수 있다면

+0

다시 폴링하지 않아도됩니다. –

0

나는 확실하지 않다 사전이 시작될 때와 끝날 때를 확인할 수있는 키.

+0

폴링이 필요 없습니다. 대신 WMI를 사용하십시오. –