我有一个应用程序,它创建了许多自定义事件日志源来帮助过滤其输出。如何在不编写任何代码的情况下从机器中删除自定义源,因为无法使用 System.Diagnostics.EventLog.Delete 运行快速程序。
我尝试使用 RegEdit 从 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services\Eventlog] 中删除自定义源,但是应用程序的行为就像日志仍然存在于幕后一样。
我还缺少什么?
我还认为您来对地方了……它以事件日志的名称存储在注册表中。我有一个自定义事件日志,其中有多个事件源。
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 进行了尝试,这就是它所做的。但是,看起来每个自定义事件日志也有同名的来源。如果您有自定义日志,则可能会影响您清除它的能力。也许您必须彻底删除日志。此外,如果您的应用程序有安装程序,我可以看到应用程序名称也可能在应用程序事件日志中注册为源。还有一处要清理的地方。
使用Powershell怎么样?
Remove-EventLog -LogName "Custom log name"
Remove-EventLog -Source "Custom source name"
我只能使用以下方法删除它:
[System.Diagnostics.EventLog]::Delete("WrongNamedEventLog");
在PowerShell中
也许您的应用程序是容错的,这意味着它会检查事件日志源是否已经注册,如果不是,则注册源?
如果是这种情况,您的应用程序将在每次运行时重新创建源,无论您做了什么。