写系统日志
/// <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);
//}
}
}