我想从ASP .NET应用程序登录到应用程序事件日志。我想调用EventLog.SourceExists来确定事件源是否首先存在,如果不存在则创建它。
如MSDN(http://msdn.microsoft.com/en-us/library/6s7642se.aspx)所述: “要在Windows Vista及更高版本或Windows Server 2003中搜索事件源,您必须具有管理权限。 此要求的原因是必须搜索所有事件日志(包括安全性)以确定事件源是否唯一。从Windows Vista开始,用户无权访问安全日志;因此,抛出SecurityException。“
在我的情况下,NetworkService用户将没有管理员权限,因此EventLog.SourceExists会抛出MSDN中记录的SecurityException。
我的问题是:如何围绕对EventLog.SourceExists的防御性调用进行编码? 在调用EventLog.SourceExists之前,有什么我可以调用以先检查是否有权搜索事件源吗?
或者是我唯一能够捕获SecurityException并在catch块中执行其他操作的选项,例如:登录到现有的事件源,例如信息
由于
凯文
答案 0 :(得分:0)
您是否必须写入Windows应用程序事件日志?默认情况下存在的安全限制确实难以实现。每次我在新VM上进行开发时,我都必须创建一个注册表项,以允许NETWORK_USER帐户写入日志,并且只要您将应用程序滚动到实时服务器上(批量注册表更改可能不是一个好主意)然后你被打瞌睡。
此外,经验告诉我,Windows事件日志不是最友好的日志记录/调试环境。对于一夜之间运行的服务器应用程序,我倾向于将我的所有事件记录到我可以在第二天阅读的html文件中,对于Web应用程序,我使用自定义数据库并将所有事件发送到该文件。