2012-01-11 16 views
12

seguito è un'eccezione che ho incontrato durante l'esecuzione del codice che segue immediatamente:C# EventLog Inaccessibile Log

La fonte non è stato trovato, ma alcuni o tutti i registri di eventi non potevano essere cercata. Log inaccessibile: sicurezza.

Il codice è

if (!EventLog.SourceExists(this.EventLogSource)) 

Il contenuto della deroga ha senso per me, è per questo che non lo fa. Questa linea è in esecuzione in Visual Studio 2010, .NET 4, come app per console (per ora). Ho eseguito questo in un ambiente diverso, ma non mi aspetterei il fatto che sono remoti desk'ed per rompere questo metodo. Ho provato a cambiare le autorizzazioni HKML\CCS\Services\eventlog - senza alcun risultato, così come le autorizzazioni C:\Windows\System32\Winevt\Logs\Security.evtx. Ancora una volta, senza successo.

Le mie domande sono le seguenti:

  1. Perché non c'è un override di ignorare i registri sicuri,
  2. Come posso ovviare a questo (programatically)
  3. È questo perché sono a distanza desked.

Qualsiasi consiglio sarebbe fantastico.

+2

Non particolarmente utile -_- – DigitalJedi805

+0

Solo sottolineando che stai rivolgendo a un pubblico globale. Tienilo a mente. – Oded

+0

Rimosso il "Buon pomeriggio" come http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts, risolvendo così il problema. – dsolimano

risposta

16

Microsoft richiede che si essere un amministratore per eseguire questo metodo per la ragione che hai trovato.

Ecco la loro spiegazione (da the MSDN documentation):

Per verificare l'un'origine eventi in Windows Vista e versioni successive o Windows Server 2003, è necessario disporre di privilegi amministrativi.

Il motivo di questo requisito è che tutti i registri eventi, inclusa la sicurezza, devono essere cercati per determinare se l'origine dell'evento è univoca. A partire da Windows Vista, gli utenti non dispongono dell'autorizzazione per accedere al registro di sicurezza; pertanto, viene lanciata una SecurityException.

Il modo in cui aggirarlo dipende interamente da ciò che è necessario fare. La migliore raccomandazione se non si è in grado di accedere come amministratore è di tentare di eseguire l'azione in un blocco try/catch e se viene lanciata una SecurityException, eseguire alcune azioni alternative.

+0

Buona spiegazione, e grazie, ma mi sembra che manchi la parte in cui il mio account locale (remoto desked o no) è un membro del gruppo Administrators. In quanto tale, dovrei conservare i privilegi amministrativi, non dovrei? – DigitalJedi805

+1

Ran VS2010 come amministratore sembrava risolvere questo problema per il mio ambiente di debug, per lo meno. Grazie per il consiglio. – DigitalJedi805

8

L'accesso ad alcuni EventLogs richiede l'elevazione. Esegui invece l'app come amministratore.

+0

Im che sta per scadere in un ambiente di debug registrato come amministratore di sistema. Dovrebbe essere sufficiente? – DigitalJedi805

+0

L'accesso come amministratore non è sufficiente: l'applicazione deve essere avviata con privilegi elevati. –

+0

Ran VS2010 come amministratore sembrava risolvere questo problema per il mio ambiente di debug, per lo meno. Grazie per il consiglio. – DigitalJedi805

0

Si consiglia di utilizzare Logging Application Block di Enterprise Library per implementare la registrazione corretta.

iniziare a leggere da here

+1

Il codice in questione non è il codice di registrazione. Sta cercando l'esistenza di una LogSource quindi non è chiaro quanto sia rilevante il tuo suggerimento. Per quanto ne sappiamo l'applicazione è responsabile per la lettura dai registri –

Problemi correlati