Asp.net 在调用EventLog.SourceExists之前检测EventLog权限

Asp.net 在调用EventLog.SourceExists之前检测EventLog权限,asp.net,permissions,event-log,Asp.net,Permissions,Event Log,我想从ASP.NET应用程序登录到应用程序事件日志。我想调用EventLog.SourceExists来确定事件源是否首先存在,如果不存在,则创建它 如MSDN中所述http://msdn.microsoft.com/en-us/library/6s7642se.aspx: 要在Windows Vista及更高版本或Windows Server 2003中搜索事件源,您必须具有管理权限。 此要求的原因是必须搜索所有事件日志(包括安全日志),以确定事件源是否唯一。从Windows Vista开始,

我想从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并在捕获块内执行某些其他操作(例如记录到现有事件源,例如信息)的唯一选项

谢谢


Kevin

您一定要写入Windows应用程序事件日志吗?默认情况下设置的安全限制确实使这一点很难做到。每次我在一个新的虚拟机上开发时,我都必须创建一个注册表项,以允许网络用户帐户写入日志,一旦你将你的应用程序滚动到一个实时服务器上,在那里进行大规模注册表更改可能不是一个好主意,那么你就开始斯诺克了


此外,经验告诉我,Windows事件日志并不是记录/调试的最友好环境。对于通宵运行的服务器应用程序,我倾向于将所有事件记录到一个html文件中,以便第二天阅读;对于web应用程序,我使用自定义数据库,并将所有事件发送到该数据库。

不,我不必使用事件日志。我的公司公开了一个日志库。其目的是,在开发过程中,如果只是为了测试而需要,应用程序可以使用此库来使用事件日志进行日志记录,假设此时它们可能没有日志数据库设置。在生产环境中,应用程序不应使用事件日志,它们应始终记录到数据库。但是,有些应用程序可能会将其代码部署到测试服务器上,例如在开发过程中,而记录到事件日志会停止工作,因为它们对权限的控制与本地计算机不同。我基本上是在尝试解决我应该围绕此编写代码,还是永远不要尝试在日志库中创建自定义事件源,相反,只需登录到信息事件源。。。谢谢你的回复!不客气;很高兴与大家分享我公认的有限知识,投票表决会很好。如果您确实需要记录到事件日志,那么我建议您创建一个自定义事件日志并记录到该日志-不要使用主应用程序事件日志。但是,正如您所说,一旦您部署到测试服务器,安全性就会阻止您的应用程序进行日志记录,因此我将探索我上面描述的其他解决方案,因为它们更加灵活。