2012-11-29 3 views
7

우리의 응용 프로그램에는 치명적이지 않은 오류가 발생하고 응용 프로그램이 복구되는 특정 상황이 있습니다.응용 프로그램 이벤트 소스에 쓸 수 있습니까?

예를 들어,이 항목을 선택 목록에 채울 때 일부 가져 오기 가능한 항목을 올바르게 식별하지 못했습니다. 오류로 인해 앱이 중단되지 않지만 일부 항목을로드하지 못했다는 경고 메시지가 사용자에게 표시됩니다.

이 경우 경고는 응용 프로그램 이벤트 로그에 오류가 기록됩니다. 앱이 복구되는 치명적이지 않은 오류이지만 이벤트 로그에 기록하면 필요하면 원래 오류를 볼 수 있습니다.

문제는 소프트웨어가 고급 사용자 계정으로 설치 될 수 있어야한다는 것입니다. 관리자 계정이 아니기 때문에 애플리케이션의 맞춤 이벤트 소스를 생성 할 수 없습니다.

목표는 "응용 프로그램"이벤트 원본 (응용 프로그램 이벤트 로그에 이미 있음)에 오류를 쓰는 것입니다. 그러나 이렇게하면 다음과 유사한 텍스트도 포함됩니다.

원본 응용 프로그램에서 이벤트 ID 0에 대한 설명을 찾을 수 없습니다. 이 이벤트를 발생시키는 구성 요소가 로컬 컴퓨터에 설치되어 있지 않거나 설치가 손상되었습니다. 로컬 컴퓨터에 구성 요소를 설치하거나 복구 할 수 있습니다.

우리가 쓸 때 EventID가 0이기 때문입니다. 이 접근법은 작업을 완료하게 될 것이지만 더 좋은 방법이 있습니까? 응용 프로그램 이벤트 소스의 EventID를 지정하여 응용 프로그램에서 가져온 것을 나타내는 관리자가 아닌 방법이 있습니까?

답변

0

당신이로 볼 수있는 오류로 읽기 원본 응용 프로그램에서 이벤트 ID 0에 대한 설명을 찾을 수 없습니다. 이 이벤트를 발생시키는 구성 요소가 로컬 컴퓨터에 설치되어 있지 않거나 설치가 손상되었습니다. 로컬 컴퓨터에 구성 요소를 설치하거나 복구 할 수 있습니다.은 이벤트 ID 0에 대한 항목이없는 응용 프로그램 소스의 등록 된 이벤트 메시지 파일의 결과입니다. 표시되는 메시지는 이벤트 메시지 파일에서 메시지 ID 템플리트를 가져 와서 이벤트 페이로드로 형식화 한 결과입니다.

내가 소유하지 않은 소스를 납치하는 것은 일반적으로 권장하지 않습니다. 그 사건을 소비하는 사람은 그들이 의미하는 것과 그들이 수행하는 정보에 대해 특별한 기대를 가지고 있습니다.

관련하여 응용 프로그램 이벤트 소스의 EventID를 지정하는 관리자가 아닌 방법으로 앱에서 왔음을 나타냅니다., 그 이벤트 ID 사양이 무엇을 기대합니까? 소스 은 이벤트가 어디에서 왔는지를 결정하는입니다.

편집 : 해당 소스가 등록 된 이벤트 메시지 파일이 없기 때문에

당신은 관계없이 0 이외의 이벤트 ID를 제공하는지 여부의 이벤트 뷰어에서 오류가 발생합니다.그리고 그렇게하더라도 메시지 파일에 항목이 있거나 (항목 사용자를 혼동시키는) 이벤트 ID 또는 항목이없는 이벤트 ID를 사용해야 만 오류가 계속 발생합니다.

+0

일부 읽기를 완료했습니다. 이벤트 원본과 결합 된 EventID는 어떤 종류의 이벤트가 발생했는지 식별합니다. 간단히 : 경고 오류는 신경 쓰지 않지만 만든 소스를 사용해서는 안됩니다. 나는 (관리가 아닌 설치 등) 하나를 만들 수있는 입장이 아니기 때문에 이러한 종류의 이벤트에 사용할 수있는 이벤트 소스를 찾거나 다른 메커니즘을 사용하여 로깅 할 수 있기를 바랍니다. 생각? – MoSlo

+0

.NET 4.5를 사용하는 경우 EventSource 클래스 (http://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource.aspx)를 사용하여 등록하지 않고도 ETW에 이벤트를 쓸 수 있습니다 . 단점은 이벤트가 이벤트 로그에 저장되지 않는다는 것입니다. 따라서 이벤트를 적극적으로 듣지 않는다면 이벤트를 얻을 수 없습니다. – fsimonazzi

0

당신은 매개 변수로 응용 프로그램 이벤트 ID를 통과 할 수 있습니다 (예 : 234)

EventLog.WriteEntry("Application", "your log message here", EventLogEntryType.Warning, 234); 

는 또한이 많으면 EventLog.WriteEntry 방법

http://msdn.microsoft.com/en-us/library/xzwc042w.aspx

+1

단지 완성을 위해이 * Application * 이벤트 소스를 사용하려면 * 수정 *을 추가해야합니다. (물론 괜찮다고 동의하지 않는 한) –

+0

그 예에서 "Application"은 이벤트 소스가 아니라 메시지입니다. 이벤트 소스는 "dotNET Sample App"입니다. 공공 정적 무효 WriteEntry ( \t 문자열 소스, \t 문자열 메시지, \t EventLogEntryType 유형, \t INT 이벤트 ID ) – fsimonazzi

+0

이 질문에 대답하지 않습니다. 또한이 결과는 "원본 응용 프로그램에서 이벤트 ID 234에 대한 설명을 찾을 수 없습니다." – user2864740