Ich verwende ein dediziertes Konto (mit SDDL-Richtlinie), um Ereignisprotokolleinträge in ein benutzerdefiniertes Ereignisprotokoll zu schreiben. Dazu verwende ich WindowsImpersonationContext und ein Token mit Logonuser erhalten:Ereignisprotokoll, Identitätswechsel und Zugriff verweigert Win32Exception
WindowsIdentity impersonationIdentity = new WindowsIdentity(ptr);
WindowsImpersonationContext impersonationContext = impersonationIdentity.Impersonate();
EventLog.WriteEntry("MyCustomSource", DateTime.Now.ToLongTimeString(), EventLogEntryType.Warning);
impersonationContext.Undo();
NativeMethods.CloseHandle(ptr);
Dieses Stück Code Ereignisprotokolleinträge erzeugt, aber ich bekomme auch eine Win32Exception:
Unhandled Exception: System.InvalidOperationException: Cannot open log for source 'MyCustomSource'. You may not have write access. ---> System.ComponentModel.Win32Exception: Access is denied
Nun verschwindet die Ausnahme, wenn ich Platz ein Thread.Sleep (500) nach dem Identitätswechsel Linie:
WindowsImpersonationContext impersonationContext = impersonationIdentity.Impersonate();
System.Threading.Thread.Sleep(500);
Was diese Ausnahme verursacht, und wie kommt die Einträge Ereignisprotokoll geschrieben werden, auch mit dem Zugang verweigert e xzeption?
Bearbeiten: Und Ofc Ich habe die Ereignisquelle mit dem zugehörigen Protokoll registriert, bevor Sie es verwenden. Ich habe nur kleine Code-Snippets eingefügt, um die Nachricht kurz zu halten.