我正在使用Windows Server 2019和.Net Framework 4.7.2测试一个ASP.NET应用程序。IIS应用程序被设置为模拟不具备管理特权的用户。
应用程序调用EventLog.SourceExists来检查事件日志源是否存在,然后再尝试创建新的源。我了解到这种方法需要管理员权限才能搜索现有的事件日志以查找源[1]。另一种实现方法是显式地给予我的用户对注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog及其所有子项的读取权限。
在Windows Server 2019之前的版本(2016、2012 R2、2018)中都起作用。
在测试时,这个应用程序在Windows Server 2019上失败,并出现异常。
当运行procmon时,我看到尝试打开“State”事件日志的注册表键时出现访问被拒绝。
“State”注册表键在Windows Server 2019中似乎是新的。它也受到保护——它由系统拥有,管理员只能进行只读操作。当我尝试授予我的用户读取权限时,我会收到访问被拒绝的消息。因此,我的非管理员用户运行的应用程序在调用EventLog.SourceExists时将失败并显示“Inaccessible logs: State”。
我意识到我可以取得“State”注册表键的所有权并添加我的用户。然而,在执行此操作之前,我想先了解一下是否有人了解Windows Server 2019中这个新的注册表键(事件日志)。
谢谢。[1]https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.eventlog.sourceexists?view=netframework-4.7.2