我有一个应用程序,它在2016 Windows Server v1607的事件日志中创建新的事件源。目前还不知道消息来源会有哪些名字。要对此进行存档,帐户需要对所有事件源进行读取访问,以确保源名称不存在(为什么不同日志中不允许使用双重源名称是另一个有趣的问题(。默认情况下,本地帐户被阻止读取安全事件日志,因此创建新源时会出现错误,即无法读取安全日志。
最有希望的方法似乎是回答这个问题:https://stackoverflow.com/a/3138269/2091030
我按照步骤1-5通过添加本地帐户的读取权限来更改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security的注册表权限。我检查了Security文件夹中的所有子密钥,它们都显示了该帐户的正确读取权限。尽管如此,我现在在使用一个简单的C#程序添加一个新来源的事件时遇到了另一个错误:
using System;
using System.Diagnostics;
namespace EventlogTest {
public class Test {
public static void Main() {
var log = new EventLog("SomeLog", ".", "SomeNewSource");
log.WriteEntry("Test 123", EventLogEntryType.Information);
}
}
}
System.Security.SecurityException: Der angeforderte Registrierungszugriff ist unzulässig.
bei System.ThrowHelper.ThrowSecurityException(ExceptionResource resource)
bei Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable)
bei System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData)
bei System.Diagnostics.EventLogInternal.VerifyAndCreateSource(String sourceName, String currentMachineName)
bei System.Diagnostics.EventLogInternal.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
bei System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type)
bei EventlogTest.Test.Main()
我错过什么了吗?
本地帐户的以下设置允许我在事件日志中添加新的源"MyLog":
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog:
- 添加具有以下权限的本地帐户:查询值、设置值、创建子密钥、枚举子密钥
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security:
- 此文件夹不继承其父文件夹的权限。添加具有正常读取访问权限的本地帐户
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\MyLog:
- 停用继承和复制值,然后添加具有完全访问权限的本地帐户