写入事件日志C#时出现System.Security.SecurityException

时间:2015-05-25 17:49:49

标签: c# .net securityexception event-viewer

我的应用程序在C#.NET中,它部署在不同的机器上。我的应用程序的用户具有正常的访问权限(没有ADMIN权限)。在一些系统上我得到System.Security.SecurityException。它说" System.Security.SecurityException:找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全"

我做了一些解决方法: -

  
      
  1. 在一台机器上我用管理员权限启动了我的应用程序,它工作正常 - 没问题。
  2.   
  3. 我在HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Eventlog \ Security中添加了用户组。   它运作良好。
  4.   

我不想去每台机器并做上面的解决方法。我需要任何可以在所有机器中应用一次的通用解决方法。 有什么帮助吗?

写下几行代码: - 配置文件: -

<add key="E_Source" Value="ABC">

C#代码

Public static readonly string E_Source = ConfigManager.GetString("E_Source");

EventLog.writeEntry(E_Source, logtext, logtype);

提前致谢

2 个答案:

答案 0 :(得分:4)

要查找要编写的源,.NET将枚举所有事件日志。如果它不存在,.NET最终将尝试枚举安全日志,对于该日志,您甚至没有普通用户的读取权限。因此,您将获得SecurityException。

因此,您必须确保事件日志存在(在不触发异常的情况下,您不能执行哪种AFAIK)。通常,您可以在安装/安装过程中执行此操作。然后,在写入时,捕获SecurityException并根据需要进行处理(例如,显示一条无法写入日志的错误消息)。

答案 1 :(得分:0)

如果您以编程方式写入EventLog,则需要创建具有提升权限的事件源,如EventLog类的文档中所述:

https://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog%28v=vs.110%29.aspx