2011-02-05 5 views
11

안녕하세요, Process.GetProcesses()를 사용하지 않고 ManagementEventWatcher를 사용하지 않고 새 프로세스가 시작될 때 이벤트를 발생시키는 방법이 있습니까? ManagementEventWatcher의 문제점은 사용자가 높은 우선 순위를 가져야한다는 것입니다. 감사합니다 !!!C# 새 프로세스가 시작될 때 이벤트 발생

+3

보안 모델을 우회하는 대신 실제로 어떤 문제를 해결하려고하는지 알려주십시오. 생각하지 못한 전반적인 접근 방식이 더 좋을 수도 있습니다. –

+0

놀이터에서 창을 사용하는 게임 (Treasure Hunt)을 만들고 있습니다. 새 메모장이나 캘린더를 열면 프로세스에 대한 힌트가 전송됩니다. 다음 프로세스가 시작될 때 이벤트를 발생시켜야합니다. 보물에 대한 힌트를 보내십시오 .... 나는 당신이 그것을 얻기를 희망합니다 .... – user604627

+0

'ManagementEventWatcher'을 시도 했습니까? 나는 매우 제한된 사용자 계정에서 시도하지 않았 음을 인정하지만 높은 권한이 필요하다고 말하는 문서에는 아무것도 표시되지 않습니다. –

답변

9

현재 사용중인 외부 이벤트 Win32_ProcessStartTrace과 달리 __InstanceCreationEvent__InstanceDeletionEvent WMI 내장 이벤트에는 관리자 권한이 필요하지 않습니다.

SELECT TargetInstance 
    FROM __InstanceCreationEvent WITHIN 1 
WHERE TargetInstance ISA 'Win32_Process' 
    AND TargetInstance.Name LIKE '<your process name.exe>' 

추가 정보 : 여기

는 프로세스 시작을 추적하는 데 사용할 수있는 샘플 쿼리의 이러한 본질적 이벤트, 폴링에 의한 WMI 궁극적으로 모방 이벤트 동작이기 때문에 Process Information and Notifications using WMI

를하고 확인합니다 새로운 이벤트에 대해서만 주기적으로 (여기서는 1 초마다). WITHIN 시간을 초 단위로 줄이면 CPU 사용량이 줄어들어 응답 속도가 빨라집니다.

+5

매우 짧은 폴링 간격 (예 : 0.1 초)은 프로세스에없는 CPU의 최대 30 %를 소비 할 수 있지만 실제 폴링을 수행하는 WmiPrvSE.exe는 사용할 수 없습니다. 왜 당신의 프로세스가 갑자기 많은 CPU를 사용하지만 하나의 시스템 프로세스를 사용하는지 궁금하게 생각한다면. –

0

이상한 점은 응용 프로그램이 창을 창에 만들 필요가 없다는 것입니다. 생성 프로세스는 작업중인 윈도우 스테이션에 속하지 않을 수 있습니다. 어쨌든 그 프로세스의 창을 찾아야하며 모든 프로세스의 새 창과 닫힌 창을 찾아야합니다.

그래서 열거 창은 훨씬 더 깔끔하고 쉽게 선택됩니다.

데스크톱 핸들 (GetDesktopWindow에서 검색)에서 EnumChildWindows 기능을 사용해보십시오. 최상위 창 응용 프로그램을 찾으십시오. 획득 된 핸들에 GetWindowThreadProcessIdEnumThreadWindows을 사용하여 창의 하위 창을 탐지하십시오.

우선 순위가 낮은 스레드가 작업을 수행합니다.

1

Windows에서 감사 프로세스 추적을 구성하여 응용 프로그램이 마지막으로 실행 된시기를 알아낼 수 있어야합니다. 다음 링크는 시작할 수 있습니다

Audit process tracking

How can I track what programs come and go on my machine?

과정 추적은 다음 C#을 사용 액세스 할 수 있습니다 Windows 이벤트 로그에 항목을 작성합니다.

참고 : 당신은 아마 USER32.DLL에서 EnumDesktopWindows을 사용할 수 있습니다 .NET Process Monitor

+0

이것은 의미가 있으며 폴링 할 필요없이 이벤트 로그 업데이트를 구독 할 수 있습니다. http://msdn.microsoft.com/en-us/library/bb671202(v=vs.90).aspx. 나는 당신에게 현상금을 수여 할 것입니다. – Satyajit

+2

원래 질문은 다른 질문자가 했으므로 답변을 수락 한 것으로 표시 할 수는 없습니다. – Satyajit

+0

http://stackoverflow.com/questions/1986249/c-sharp-process-monitor#answer-1986294를 축 어적으로 복사하지 않으시겠습니까? 그 현상금을 얻는 것이 정상입니까? 현상금은 [0xA3] (http://stackoverflow.com/users/40347/0xa3)에 속하면 안됩니까 ?? –

0

, 당신은 당신이 et Wi ndow Te xt는을 사용하여 윈도우의 제목을 확인할 수 있습니다 모든 창 핸들을 얻고, 윈도우의 종류 GetClassSignature의를 사용하는 것입니다.

그런 식으로 힌트 또는 보물을 숨길 수 있습니다. (왜냐하면 모든 창 (및 컨트롤) 핸들을 얻을 것이다). 이 클래스는 그 기사에 Managed Global Hook for Window Creation and Destruction

에, 누군가가 이벤트를 연결하는 쉬운 좋은 클래스를 만들었습니다 도움이 될 것입니다 경우

당신은 권한이 상승하지 않고 그 코드를 실행할 수 있습니다 참조하십시오.

윈도우 (컨트롤) 핸들을 얻으면 힌트를 위해 텍스트를 추가하거나 이미지를 그릴 수 있습니다.

관련 문제