2016-12-06 1 views
0

Ich habe ein wirklich seltsames Problem mit einer Anwendung, die ich vor einer Weile geschrieben habe. Es hat ohne Probleme funktioniert, aber nachdem es für eine Weile allein gelassen wurde, hörte es einfach auf zu funktionieren. Ich werde den Code hier anhängen:Kann nicht in Windows-Anwendungsprotokoll (C#) schreiben

try 
{ 
    using (Process proc = Process.Start(starter)) 
    { 
     windowHider(); 
     proc.WaitForExit(); 

     DateTime endStamp = DateTime.Now; 
     endStamp = truncate(endStamp); 
     TimeSpan diff = endStamp.Subtract(startStamp); 

     string programSource = "applicationName"; 
     string logLocation = "Application"; 
     string occurance = "Var='" + varName + "' Var2='"+ var2Name + "' Var3='" + var3Name + "' Var4='" + var4Name + "' Var5='" + var5Name + "' Var6='" + var6Name + "'"; 

     try 
     { 
      if (!EventLog.SourceExists(programSource)) 
      { 
       EventLog.CreateEventSource(programSource, logLocation); 
      } 
      else 
      { 
       EventLog.WriteEntry(programSource, occurance); 
      } 
     } 
     catch (Exception err) 
     { 
      string message = "There was an error with usage logging. Please contact IT."; 
      MessageBox.Show(message); 
      errorLogger(message, err.ToString(), ((Control)sender).Name); 
      this.Close(); 
     } 

     this.Close(); 
    } 
} 

Wenn der Prozess, der Ausfahrten gestartet wurde, wird das Programm in das Anwendungsprotokoll schreibt. Aus irgendeinem Grund bin ich jedoch immer folgende Fehlermeldung:

Exception: System.ComponentModel.Win32Exception (0x80004005): The specified path is invalid

Sie führt diese Linie als Ursache:

EventLog.WriteEntry(programSource, occurance); 

Alle Ideen, was diese plötzliche Problem sein könnte?

+0

Ist 'programSource' im Ereignisprotokolldienst registriert? – AlG

+0

Sie müssen dem Registrierungsschlüssel HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Anwendung \ anwendungsname die Berechtigung erteilen, unter der der betreffende Code ausgeführt wird. –

+0

@AlG Mit EventLog.CreateEventSource, um die Quelle zu generieren, sollte dies tun, oder? Gibt es eine Möglichkeit, eine Programmquelle programmatisch zu registrieren? – Rich

Antwort

0

Ich habe es herausgefunden! In der Registry war etwas kaputt, und irgendwo musste irgendwo eine andere beschädigte Komponente herumlungern. Ich änderte den Quellennamen und es funktionierte ohne Probleme.

Der ursprüngliche sourcename funktioniert auf anderen Maschinen, die mich denken, dass es definitiv nur etwas mit der Registrierung wonky war.