2013-10-27 2 views
2

Windows 이벤트 뷰어의 전역 "응용 프로그램"로그에 경고 및 오류를 표시하도록 응용 프로그램을 활성화하고 싶습니다. 나는 성공적으로 추적 프로그램을 통해 로깅을 활성화 할 때만 이벤트를 볼 수 있으며, 심지어는 글로벌이 아닌 생성 된 .etl 파일에 나타나기 때문에 ETW를 시작하고 실행하는 데 도움이되는 지침 here을 성공적으로 따라 왔습니다. 로그.글로벌 "응용 프로그램"로그에 ETW 이벤트 보내기

사용자가 이벤트 뷰어를 실행할 때 내 응용 프로그램의 이벤트를 볼 수 있도록 프로그래밍 방식으로 이벤트를 전역 응용 프로그램 로그에 기록하고 쓸 수 있습니까? 심지어 가능할까요? 간단히 말해서, 난 그냥 덜 photoshopping 필요로, 아래 스크린 샷과 같이 끝낼하려면 :

enter image description here

+0

... 사람이 실제로 글로벌 애플리케이션에서 관련 이벤트를 탐지하기 위해 관리하는 경우로 로그인 ... 당신의 이벤트가 실제로 사용하기 위해 조회 할하려는 경우 별도의 로그, "응용 프로그램"하나는 가장 오염 된 것입니다, 당신이 거기에서 찾고있는 것을 발견하는 것은 언제나 악몽입니다. –

+0

@MatteoItalia 개인적으로 내 컴퓨터에서 문제가 발생할 때마다 먼저 이벤트 뷰어를 확인하십시오. 시간의 상당 부분, 거기에있는 정보는 내가 스스로 문제를 해결하도록 인도하거나 적어도 다음에 무엇을 검색해야 하는지를 안다. 내 앱을 사용하는 사람들에게 동일한 경험을 허용하고 싶습니다. 커스텀 이벤트 로그의 문제점은 아무도 거기에 있다는 것을 알지 못한다는 것입니다. – MooseBoys

답변

2

ETW는 당신의 목적을 위해 매우 복잡한 것 같다, 여기에 이벤트 로그에 기록하는 절차입니다 :

a) 한 번만 (일반적으로 응용 프로그램을 설치하는 동안 수행) Register your application as a Event Provider; 단지 EventMessageFile 항목은 정말 필요합니다
- 키 = HKEY_LOCAL_MACHINE을 \ 시스템 \ CURRENTCONTROLSET 서비스 \ \ 이벤트 로그 응용 프로그램 \ MyCoolGame
\ - 문자열 이름 (REG_EXPAND_SZ) =으로 EventMessageFile
- 문자열 값 = C : \ WINDOWS \ Microsoft.NET \ 프로그램 시작에 프레임 워크 \ v4.0.30319 \ EventLogMessages.dll

B) : 이벤트 로그에 항목을 기록 할 ReportEvent function를 사용)

hEventLog = RegisterEventSource(NULL, lpszAppNameName); 

C : Register Event Source와 핸들을받을

프로그램 종료에
TCHAR szLogBuffer[] = _T("Started new multiplayer server."); 
const TCHAR *lpszEventStrings[2] = {szLogBuffer, NULL}; 
ReportEvent(hEventLog, EVENTLOG_INFORMATION_TYPE, 0, 1, NULL, 1, 0, lpszEventStrings, NULL) 

D) :

DeregisterEventSource(hEventLog);