写系统日志

 /// <summary>
        /// 向日志管理器写入系统日志
        /// </summary>
        /// <param name="source">消息事件来源</param>
        /// <param name="message">要在消息事件中写入的信息</param>
        /// <param name="type">消息事件类型</param>   
        /// <param name="eventID">消息事件的事件ID。(0~65535)</param>
        /// <exception cref="System.ComponentModel.Win32Exception">系统日志存储空间不足时</exception>
        /// <exception cref="System.Security.SecurityException">操作系统日志权限不足时</exception>
        static public void WriteEntry(string source, string message, LogType type, int eventID)
        {
            try
            {
                if (!EventLog.SourceExists(source))
                {
                    EventLog.CreateEventSource(source, LOG_NAME);
                }
                EventLog.WriteEntry(source, message, GetLogEntryType(type), eventID, CATEGORY);
            }

            catch (SecurityException)
            {

                //碰到权限不够无法操作系统日志的情况时,模拟本地管理员权限进行操作。

                //提示:当注册表中没有消息事件来源时,会发生该例外

                //ImpersonateAccount类的代码参考鄙人另一篇文章C#模拟AD用户
                //不要指望可以使用System.Diagnostics.EventLogInstaller类,使用它也需要本地系统管理员的权限

                //using (ImpersonateAccount sa = new ImpersonateAccount("<用户名>", "<域>", "<密码>"))
                //{

                //    if (!EventLog.SourceExists(source))
                //    {

                //        EventLog.CreateEventSource(source, LOG_NAME);

                //    }

                //    EventLog.WriteEntry(source, message, GetLogEntryType(type), eventID, CATEGORY);

                //}

            }

        }

posted @ 2011-03-29 13:46  尹成亮  阅读(448)  评论(0编辑  收藏  举报