EventLog WriteEntry不会在C#中写入EventViewer

时间:2014-11-05 19:23:43

标签: c#

我创建了一个C#应用程序,它在事件查看器中创建自定义日志名称,并将条目写入事件查看器。

我的应用程序在Windows-7操作系统计算机上工作正常但是当我将我的二进制文件复制到另一个窗口 - 2012服务器标准(SP1)计算机时,它无法正常工作。

我运行了我的应用程序RunAs管理员,我只看到自定义日志名称,但没有看到日志消息。

我已在注册表事件日志条目中给予完全许可,但没有运气。 有人可以建议我如何解决这个问题。或调试技术来解决这个问题。

我调试了代码没有例外,代码运行顺利。 我的代码很简单,如下所示:

EventLog.CreateEventSource("MyApp", "TestingApplication")
EventLog.WriteEntry("MyApp", "Testing 123")

今天我已经使用相同的eventsource和eventlogname进行了测试,如下所示     EventLog.CreateEventSource(“MyApp”,“MyApp”) 它在windows-2012服务器标准(SP1)中运行良好,Win-2012(SP1)中是否存在任何问题或者我遗漏了什么。

3 个答案:

答案 0 :(得分:2)

即使以管理员身份运行,在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服务,那么您受到的限制会更加严格,因为服务无法提升&#34;提升&#34;在我知道的情况下直接通过他们的清单获得特权。

但是,您的服务安装程序可以提升,并且应该在所需的管理权限下运行,您可以在服务安装程序中创建事件源;然后在服务本身内消费它。

答案 1 :(得分:0)

我遇到了同样的问题。我正在使用WinServer 2012r2。日志创建成功但写入事件显示在应用程序日志中。我阅读了很多MSDN和论坛,并完成了所有的书籍,仍然有这个问题。似乎MS在最新的.Net框架中有一个错误,导致所有消息都转到应用程序日志:(

最后我重新启动服务器之后一切正常。我不确定为什么我需要重新启动服务器,如果使用eventcreate命令行测试一切正常。

答案 2 :(得分:0)

我通过停止/启动Windows事件日志服务解决了这个问题。我不知道问题是什么,但是像Leo一样,它可能是一个错误。

相关问题