EventLog WriteEntry不写入C#中的EventViewer
本文关键字:中的 EventViewer WriteEntry EventLog | 更新日期: 2023-09-27 18:29:21
我创建了一个C#应用程序,它在事件查看器中创建自定义日志名称,并将条目写入事件查看器。
我的应用程序在Windows7操作系统机器上运行良好,但当我将二进制文件复制到另一台Windows-2012服务器标准(SP1)机器上时,它不工作。
我运行了我的应用程序运行方式管理员,我只看到自定义日志名称,但没有看到日志消息。
我已经在注册表事件日志条目中授予了完全权限,但没有运气。有人能建议我如何解决这个问题吗。或者使用调试技术来解决此问题。
我调试过的代码没有异常,代码运行的很顺利。我的代码很简单,如下所示:
EventLog.CreateEventSource("MyApp", "TestingApplication")
EventLog.WriteEntry("MyApp", "Testing 123")
今天,我使用相同的eventsource和eventlogname进行了测试,如下所示EventLog.CreateEventSource("MyApp","MyApp")它在windows-2012服务器标准(SP1)中运行良好,Win-2012(SP1)是否有任何问题,或者我遗漏了什么。
即使以管理员身份运行,在Windows Server 2008 R2中,它也默认为没有提升的权限。您需要提升权限才能创建源。一旦创建了源,它应该允许您对其进行写入
有几种方法可以解决这个问题,如果你正在构建一个实际的应用程序,你可以修改应用程序清单以要求提升权限和管理权限:
<?xml version="1.0" encoding="utf-8" ?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"
xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator"
uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>
或者,如果您正在构建一个普通的应用程序,您可以将代码拆分为一个单独的过程来创建事件源。然后,您可以检查事件源是否存在,如果存在,请使用它;如果不存在,则可以运行创建事件源的新流程。
在Process
开始信息中,您需要'runas'
动词。
如果你运行的是windows服务,你会受到更多的限制,因为据我所知,服务没有直接通过其清单"提升"权限的能力。
然而,您的服务安装程序可以很好地提升,并且应该在所需的管理权限下运行,您可以在服务安装程序中创建事件源;然后在服务本身中使用它。
我通过停止/启动Windows事件日志服务解决了这个问题。我不知道是什么问题,但就像利奥说的那样,这可能是一个bug。
我遇到了完全相同的问题。我使用的是WinServer 2012r2。日志创建成功,但写入事件显示在应用程序日志中。我读了很多MSDN和论坛,做了所有的书,但仍然有这个问题。似乎MS在最新的.Net框架中有一个错误,导致所有消息都进入应用程序日志:(
最后,在我重新启动服务器后,一切都很好。我不知道如果用eventcreate命令行测试一切正常,为什么我需要重新启动服务器。