45

我有一个应用程序,它创建了许多自定义事件日志源来帮助过滤其输出。如何在不编写任何代码的情况下从机器中删除自定义源,因为无法使用 System.Diagnostics.EventLog.Delete 运行快速程序。

我尝试使用 RegEdit 从 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services\Eventlog] 中删除自定义源,但是应用程序的行为就像日志仍然存在于幕后一样。

我还缺少什么?

4

4 回答 4

50

我还认为您来对地方了……它以事件日志的名称存储在注册表中。我有一个自定义事件日志,其中有多个事件源。

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

这些源有一个EventMessageFile键,它是REG_EXPAND_SZ并指向:

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

我认为如果您删除作为日志源的密钥(在我的示例中为 LOGSOURCE1),那么这应该就是所需要的。

对于它的价值,我通过 .NET 进行了尝试,这就是它所做的。但是,看起来每个自定义事件日志也有同名的来源。如果您有自定义日志,则可能会影响您清除它的能力。也许您必须彻底删除日志。此外,如果您的应用程序有安装程序,我可以看到应用程序名称也可能在应用程序事件日志中注册为源。还有一处要清理的地方。

于 2008-09-24T17:55:19.003 回答
36

使用Powershell怎么样?

Remove-EventLog -LogName "Custom log name"

Remove-EventLog -Source "Custom source name"
于 2015-03-06T16:12:20.440 回答
6

我只能使用以下方法删除它:

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

在PowerShell中

于 2016-05-24T14:40:56.223 回答
3

也许您的应用程序是容错的,这意味着它会检查事件日志源是否已经注册,如果不是,则注册源?

如果是这种情况,您的应用程序将在每次运行时重新创建源,无论您做了什么。

于 2008-09-24T15:46:44.070 回答