2013-02-21 4 views
1

Windows 이벤트 로그에 이벤트를 쓰는 중 문제가 발생합니다. 게시물을 살펴본 결과 올바르게보고 있지만 이벤트 뷰어에서 다음과 같은 오류가 발생합니다.응용 프로그램 이벤트 로그에 메시지 쓰기

메시지 리소스가 있지만 메시지가 문자열/메시지 테이블에 없습니다.

내가 누락 된 항목에 대한 아이디어가있는 사람이 있습니까? 여기

<Fragment> 
    <PropertyRef Id="NETFRAMEWORK35"/> 
    <PropertyRef Id="NETFRAMEWORK20"/> 
    <PropertyRef Id="NETFRAMEWORK20INSTALLROOTDIR"/> 
    <PropertyRef Id="NETFRAMEWORK20INSTALLROOTDIR64" /> 

    <Component Id='EventSource' 
       Directory='INSTALLDIR' 
       Guid='F382AAC5-F7C5-46A4-95CF-EA7724DXXXXX' > 
     <Condition>ALLUSERS</Condition> 
     <?if $(var.Platform) = x64 ?> 
      <util:EventSource Log='Application' 
        Name='MySource' 
        EventMessageFile='[NETFRAMEWORK20INSTALLROOTDIR64]EventLogMessages.dll' 
        KeyPath='yes' /> 
     <?else ?> 
      <util:EventSource Log='Application' 
        Name='MySource' 
        EventMessageFile='[NETFRAMEWORK20INSTALLROOTDIR]EventLogMessages.dll' 
        KeyPath='yes' /> 
     <?endif ?> 
    </Component> 
</Fragment> 

내가 이벤트 로그에 기록 내 C# 코드입니다 :

나는 윅스 설치 프로그램에서 만든 이벤트 소스를 데

public class Log 
{ 
    private const string EventSource = "MySource"; 
    private const string EventLog = "Application"; 
    private static EventLog _logger = null; 

    private static void InitLogger() 
    { 
     if (!System.Diagnostics.EventLog.SourceExists(EventSource)) 
     { 
      System.Diagnostics.EventLog.CreateEventSource(EventSource, EventLog); 
     } 
     _logger = new EventLog() { Source = EventSource, Log = EventLog }; 
    } 

    public static void Write(EventLogEntryType entryType, string format, params object[] args) 
    { 
     string entry = _Format(format, args); 

     try 
     { 
      if (_logger == null) 
       InitLogger(); 
      _logger.WriteEntry(entry, entryType, 1); 
     } 
     catch (Exception ex) 
     { 
      Tracer.Misc.Error("Could not write to event log: {0}", entry); 
     } 

    } 

    private static string _Format(string format, object[] args) 
    { 
     if ((args == null) || (args.Length == 0)) 
      return format; 

     try 
     { 
      return String.Format(format, args); 
     } 
     catch (Exception e) 
     { 
      return format + " [Format Exception:" + e.Message + "]"; 
     } 
    } 
} 
+0

이 트레이서 무엇

메시지 자원이 존재하지만 메시지가 문자열/메시지 테이블에서 찾을 수없는 로그 메시지의 예입니다

다음 정보는 이벤트에 포함 된 .Misc.Error? 전체 소스 샘플? – Kiquenet

답변

3

나는 내 문제를 알아 냈어. 내가 가지고있는 코드는 괜찮습니다. 문제는 제가 사용하고있는 EventSource의 이름입니다. 이벤트 원본에 공백과 대시가 포함되어 있습니다. 내가 제거했을 때 효과가있었습니다.

I.E. '내 이벤트 소스'에서 'MyEventSource'로 이동

+2

이렇게하면 내 문제가 해결되었습니다. 이벤트 소스가 공백을 가질 수 없다는 것은 어디에도 분명하지 않으며, 이벤트 뷰어의 일부 이벤트 소스조차도 이름에 공백이 있습니다 ... 매우 당혹 스럽습니다! – dreamlax

0

또한 "응용 프로그램"에 로그인하는 경우 이벤트 소스를 "응용 프로그램"으로 설정할 수 없습니다 (이벤트 참고 : 지금 대답하십시오. 대답이 아닙니다.) 다음과 같이 로깅 세부 정보를 제공합니다.

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

이벤트가 다른 컴퓨터에서 발생한 경우 표시 정보 을 이벤트와 함께 저장해야했습니다.

관련 문제