其实这个话题也是恒久不衰的了
其中<ASP.NET PRO>杂志上就收录了一篇老外不错的教程
当然,他已经讲得很好了,我就不需要再啰嗦了
不过,我要讲的是EVENTLOG操作的权限问题,因为这个问题是能否使用EVENTLOG的关键所在

很多朋友看了例子立即尝试,却得到系统抛出的SECURITYEXCEPTION异常
为什么呢?原因是缺省情况下,ASP.NET的运行帐户local service 根本没有创建事件日志以及事件源的权限.
因此,要想在代码中建立事件日志及事件源,请将注册表中
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog
键的完全控制权赋予local service帐户即可

另外,许多人抱怨为什么没有提供CreateLog之类的建立自定义事件日志的方法.其实这的确很不便,但确实不是.NET的错
因为CreateEventSource方法在建立事件源的同时,会检查指定的事件日志是否存在,如果不存在,则会自动建立对应的事件日志.
另外,缺省情况下EventLog类建立的事件日志存在于%SystemRoot%\System32\Config文件夹中.名称就是事件日志的名字的前八个字符.

当然,对于虚拟主机的管理人员来说,开放注册表权限的确是个比较困难的事情,那样的话,所有虚拟主机用户都有了权限.因此,以上方法仅适用于独立主机来说.

另外,你也可以使用下面的方法中的一种:

1.建立安装程序,安装程序会继承installer类,而System.Configuration.Install命名空间中提供了EventLogInstaller类,使用此类,可以在安装程序中建立事件源.

2.你也可以仿照HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog键下的APPLICATION或者SYSTEM来建立自定义事件日志及源,然后将其导出成注册表脚本,在布署时直接导入此脚本即可

总之,要么在使用EVENTLOG类操作前确认对应的事件日志及事件源是存在的,要么,就需要拥有适当的权限