2013-10-02 2 views
0

USB 장치가 연결된 이벤트를 찾기 위해 WMI를 사용하고 있습니다.이 문제를 해결하기 위해 독립 실행 형 클래스를 만들었습니다. 내 응용 프로그램에서 클래스를 호출하자마자 작동하지 않습니다. 이 코드는 클래스를 독립 실행 형 exe로 컴파일 할 때 main()을 제외하고는 동일합니다. 코드는 다음과 같습니다.WMI 쿼리 및 이벤트는 응용 프로그램이 아닌 단일 클래스에서 작동합니까?

ManagementScope scope = new ManagementScope("root\\CIMV2"); //set the scope 
WqlEventQuery query = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA 'Win32_PnPEntity'"); //set the events 
watcher = new ManagementEventWatcher(scope, query); 
watcher.EventArrived += new EventArrivedEventHandler(this.DeviceChangeEventReceived); 
watcher.Start(); 

큰 응용 프로그램에 내장 된 경우 DeviceChangeEventReceived 메서드가 호출되지 않습니다. 나는 그것이 그것이 범위일지도 모른다라고 생각했다. 그러나 그것이 아닌 것처럼 보인다. 나는 그것이 단순한 것이라고 확신하지만 아이디어가 없습니다. 감사!

답변

1

독립 실행 형 클래스와 클래스를 호출하는 응용 프로그램간에 수정 된 WMI 쿼리가 필요하다고 판단했습니다. TIMESPAN이 있어야합니다. 나는 핸들러에 10 초의 시간대를 부여한 바보 같은 행운을 발견했다.

"SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE TargetInstance ISA 'Win32_PnPEntity'" 

IT는 시간 범위가 지정되지 않은 경우,이 경우는 상황이 불쾌한로 원인 WQLEventQuery 방법은 단지 여론 조사 보인다. 예외가 발생하면 좋았지 만 InterloperServices에는 무언가가 묻혀있을 것입니다.

관련 문제