2008-09-24 3 views
37

Ich habe eine Anwendung, die eine Reihe von benutzerdefinierten Ereignisprotokollquellen erstellt hat, um die Ausgabe zu filtern. Wie kann ich die benutzerdefinierten Quellen von der Maschine löschen OHNE Code zu schreiben, während ein Schnellprogramm mit System.Diagnostics.EventLog.Delete ausgeführt wird.Löschen der benutzerdefinierten Ereignisprotokollquelle ohne Verwendung von Code

Ich habe versucht, mit RegEdit die benutzerdefinierten Quellen aus [HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSetXXX \ Services \ Eventlog] zu entfernen, aber die Anwendung verhält sich so, als ob die Protokolle immer noch hinter den Kulissen existieren.

Was fehlt mir noch?

Antwort

40

Ich denke auch, Sie sind an der richtigen Stelle ... es ist in der Registrierung gespeichert, unter dem Namen des Ereignisprotokolls. Ich habe ein benutzerdefiniertes Ereignisprotokoll, unter dem mehrere Ereignisquellen sind.

HKLM \ System \ CurrentControlSet \ Services \ Eventlog \ LOGNAME \ LOGSOURCE1 HKLM \ System \ CurrentControlSet \ Services \ Eventlog \ LOGNAME \ LOGSOURCE2

Diese Quellen haben eine Eventmessagefile Schlüssel, das ist REG_EXPAND_SZ und weist auf:

C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ EventLogMessages.dll

Ich denke, wenn Sie den Schlüssel löschen, der die Protokollquelle ist, LOGSOURCE1 in meinem Beispiel, sollte das alles sein, was benötigt wird.

Für was es wert ist, habe ich es über .NET versucht und das ist, was es getan hat. Es sieht jedoch so aus, als ob jedes benutzerdefinierte Ereignisprotokoll auch eine Quelle mit demselben Namen enthält. Wenn Sie ein benutzerdefiniertes Protokoll haben, könnte dies Ihre Fähigkeit beeinträchtigen, es zu löschen. Sie müssten das Protokoll vielleicht komplett löschen. Wenn Ihre App über ein Installationsprogramm verfügt, kann ich außerdem feststellen, dass der Anwendungsname möglicherweise auch als Ereignis im Anwendungsereignisprotokoll registriert ist. Noch ein Platz zum Ausräumen.

+0

Das ist es, löschte den Eintrag unter dem Quellcode aussortiert. Schönes sauberes Ereignisprotokoll und die App hat ihre Quellen neu erstellt und verwendet sie korrekt. Vielen Dank! – Wolfwyrd

+2

Ich hasse es, mit der Registry zu meckern, aber manchmal ist es der einzige Weg. Leider können Sie EventSources nicht wie EventLogs effektiv aufzählen. Sie können die Existenz testen, indem Sie einen Namen angeben, aber Sie können sie nicht durchlaufen. –

+1

Sie können eine Liste von eventlog Quellen von Wildcard mit der Powershell erhalten Get_ChildItem "HKLM: \ SYSTEM \ CurrentControlSet \ Services \ Eventlog \ ..." -Name Wenn Sie fummeln diese in eine durch Kommata getrennte Liste in einem Text-Editor Sie können es mit dem Cmdlet Remove-Eventlog -Quelle verwenden, um mehrere Ereignisquellen gleichzeitig zu löschen. Sehr praktisch, wenn Sie Quellen mit ähnlichen Namen löschen möchten. – needfulthing

3

Vielleicht ist Ihre Anwendung fehlertolerant, dh sie prüft, ob die Ereignisprotokollquelle bereits registriert ist, und registriert die Quelle, wenn dies nicht der Fall ist?

Wenn dies der Fall wäre, würde Ihre Anwendung die Quelle (n) jedes Mal neu erstellen, wenn es ausgeführt wird, egal was Sie getan haben.

+1

dass ein Teil davon sein könnte. Das Problem, das wir sehen, ist, dass es nicht in die benutzerdefinierten Quellen geschrieben wird, sondern in das Anwendungsprotokoll. Die Quelle dieses Fehlers wurde behoben und wir versuchen nur, das Ereignisprotokoll zu bereinigen, damit wir neu beginnen können. – Wolfwyrd

23

Wie wäre es mit Powershell?

Remove-EventLog -LogName "Custom log name" 

Remove-EventLog -Source "Custom source name" 
+0

Ich glaube nicht, dass dies in PowerShell vor 7 Jahren unterstützt wurde (scheint mit v3 veröffentlicht worden zu sein), aber +1 für eine moderne Lösung! – Wolfwyrd

4

Ich war nur in der Lage, sie zu löschen, indem Sie:

[System.Diagnostics.EventLog]::Delete("WrongNamedEventLog"); 

in Power