Como gerir registos de eventos utilizando o Visual C# .NET ou Visual C# 2005

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 815314
Para obter uma Microsoft Visual Basic .NET versão deste artigo, consulte 814564.
Sumário
Este artigo passo a passo descreve como aceder e Personalizar registos de eventos do Windows utilizando o Microsoft .NET Framework. Com a classe de registo de eventos pode interagir com registos de eventos do Windows. Utilizar a classe de registo de eventos que pode ler os registos existentes, escrever entradas de registo de eventos, criar ou eliminar origens de eventos, eliminar registos e responder a entradas de registo. O artigo também descreve como criar novos registos ao criar uma origem de evento.

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs são necessários:
  • O Microsoft .NET Framework
  • Microsoft Visual C# .NET ou Microsoft Visual C# 2005.
Este artigo pressupõe que está familiarizado com os seguintes tópicos:
  • Microsoft Visual C# .NET ou Microsoft Visual C# 2005 sintaxe
  • Microsoft Visual Studio .NET ou o ambiente de Microsoft Visual Studio 2005
  • Erro de processamento no .NET Framework

Localizar os registos existentes no computador


Pode localizar os registos existentes num computador utilizando o método partilhado GetEventLogs da classe de registo de eventos . O método GetEventLogs procura todos os registos de eventos no computador local e cria uma matriz de objectos de registo de eventos que contém a lista. O exemplo seguinte obtém uma lista de registos no computador local e, em seguida, apresenta o nome do registo numa janela de consola.
EventLog[] remoteEventLogs; // Gets logs on the local computer, gives remote computer name to get the logs on the remote computer.remoteEventLogs = EventLog.GetEventLogs(System.Environment.MachineName);Console.WriteLine("Number of logs on computer: " + remoteEventLogs.Length);for ( int i=0; i<remoteEventLogs.Length; i++ )   Console.WriteLine("Log: " + remoteEventLogs[i].Log);

Ler e escrever registos de local e remoto sistema

Ler registos

Para ler um registo de eventos, utilize as propriedades entradas da classe de registo de eventos . A classe de registo de eventos entradas de propriedade é um conjunto de todos os movimentos no registo de eventos. Pode iterar através desta colecção e ler todos os movimentos de registo especificado. O seguinte código demonstra como o fazer: pode ser
      //logType can be Application, Security, System or any other Custom Log.string logType = "Application";			EventLog ev = new EventLog(logType, System.Environment.MachineName);int LastLogToShow = ev.Entries.Count;if ( LastLogToShow <= 0 )Console.WriteLine("No Event Logs in the Log :" + logType);// Read the last 2 records in the specified log. int i;for ( i = ev.Entries.Count - 1; i>= LastLogToShow - 2; i--){	EventLogEntry CurrentEntry = ev.Entries[i];	Console.WriteLine("Event ID : " + CurrentEntry.EventID);	Console.WriteLine("Entry Type : " + CurrentEntry.EntryType.ToString());	Console.WriteLine("Message :  " + CurrentEntry.Message + "\n");}	ev.Close();

Escrever registos

Para escrever um registo de eventos, utilize o método WriteEntry da classe de registo de eventos . Para escrever o registo de eventos com êxito, a aplicação tem de ter acesso de escrita no registo que está a tentar escrever. Para obter mais informações sobre as permissões que tem de ter para ler e escrever num registo de eventos, visite o seguinte Web site da Microsoft.
Segurança Consequência de registos de eventos
http://msdn2.microsoft.com/en-us/library/4xz6w79h(vs.71).aspx
Terá de definir a propriedade de origem na instância de componente de registo de eventos para que poder escrever entradas a um registo. Quando o componente escreve uma entrada, o sistema verifica automaticamente para ver se a origem que especificou está registada no registo de eventos que o componente está a escrever e, em seguida, chama CreateEventSource (se tem de ser chamado CreateEventSource ).
  //See if the source exists. if ( ! ( EventLog.SourceExists("MySystemSource", System.Environment.MachineName)))EventLog.CreateEventSource("MySystemSource", "System", System.Environment.MachineName);        EventLog ev = new EventLog("System", System.Environment.MachineName, "MySystemSource");/* Writing to system log, in the similar way you can write to other  * logs that you have appropriate permissions to write to */ev.WriteEntry("Warning is written to system Log", EventLogEntryType.Warning, 10001);MessageBox.Show("Warning is written to System Log");ev.Close();   

Limpar registos

Quando um registo de eventos estiver cheio, deixa de registar novas informações de evento ou começa a substituir entradas anteriores. Se parar a gravação de eventos, pode limpar o registo de entradas existentes e permitir iniciar iniciar a gravação eventos novamente. Chame o método Clear na instância de componente de registo de eventos.

Nota Para limpar entradas do registo de eventos, tem de ter permissões de administrador no computador onde o registo é
     //Create an EventLog instance and pass log name and MachineName where the log resides.EventLog ev = new EventLog("Security", System.Environment.MachineName);ev.Clear();ev.Close(); 

Criar e eliminar registos de personalizada

Criar o registo personalizado

Pode utilizar o método CreateEventSource para criar o seu processador de eventos personalizados. Antes de criar um registo de eventos, utilize o método SourceExists para verificar que a origem que está a utilizar ainda não existir e, em seguida, chamar CreateEventSource . Se tentar criar um registo de eventos que já exista, System.ArgumentException é accionada.
     // Create the source, if it does not already exist.if (! (EventLog.SourceExists("MyOldSource", System.Environment.MachineName)))		EventLog.CreateEventSource("MyOldSource", "MyNewLog", System.Environment.MachineName);Console.WriteLine("CreatingEventSource"); 

Eliminar o registo personalizado

Para eliminar o registo de eventos, pode utilizar o método delete da classe de registo de eventos . Pode escrever mais do que uma origem de um registo de eventos. Por conseguinte, antes de eliminar um registo personalizado, certifique-se que existem não outras origens que escrever para esse registo.
     string logName = "MyNewLog";if ( EventLog.SourceExists("MyOldSource", System.Environment.MachineName)){	logName = EventLog.LogNameFromSourceName("MyOldSource", System.Environment.MachineName);	EventLog.DeleteEventSource("MyOldSource", System.Environment.MachineName);	EventLog.Delete(logName, System.Environment.MachineName);	Console.WriteLine(logName + " deleted.");}    

Eventos de receber notificações

Poderá receber a notificação de eventos quando é escrita uma entrada a um registo específico. Para efectuar este procedimento, implemente o processador de eventos EntryWritten a ocorrência do registo de eventos . Também, defina EnableRaisingEvents como true .

Nota Só pode receber notificações de eventos quando entradas são escritas no computador local. Não é possível receber notificações para movimentos que são escritas em computadores remotos.

Concluir código lista

using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.Security;using System.IO;using System.Diagnostics;namespace WindowsApplication1{	/// <summary>	/// Summary description for Form1.	/// </summary>	public class Form1 : System.Windows.Forms.Form	{		private System.Diagnostics.EventLog eventLog1;		private System.Windows.Forms.Button btnListLog;		private System.Windows.Forms.Button btnReadLog;		private System.Windows.Forms.Button btnWriteLog;		private System.Windows.Forms.Button btnClearLog;		private System.Windows.Forms.Button btnCreateLog;		private System.Windows.Forms.Button btnDeleteLog;		private System.Windows.Forms.Button btnRecNotice;				/// <summary>		/// Required designer variable.		/// </summary>		private System.ComponentModel.Container components = null;		public Form1()		{			//			// Required for Windows Form Designer support.			//			InitializeComponent();			//			// TODO: Add any constructor code after InitializeComponent call.			//		}		/// <summary>		/// Clean up any resources that are being used.		/// </summary>		protected override void Dispose( bool disposing )		{			if( disposing )			{				if (components != null) 				{					components.Dispose();				}			}			base.Dispose( disposing );		}		#region Windows Form Designer generated code		/// <summary>		/// Required method for Designer support - do not modify		/// the contents of this method with the code editor.		/// </summary>		private void InitializeComponent()		{			this.eventLog1 = new System.Diagnostics.EventLog();			this.btnListLog = new System.Windows.Forms.Button();			this.btnReadLog = new System.Windows.Forms.Button();			this.btnWriteLog = new System.Windows.Forms.Button();			this.btnClearLog = new System.Windows.Forms.Button();			this.btnCreateLog = new System.Windows.Forms.Button();			this.btnDeleteLog = new System.Windows.Forms.Button();			this.btnRecNotice = new System.Windows.Forms.Button();			((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit();			this.SuspendLayout();			// 			// eventLog1			// 			this.eventLog1.MachineName = System.Environment.MachineName;			this.eventLog1.SynchronizingObject = this;			this.eventLog1.EntryWritten += new System.Diagnostics.EntryWrittenEventHandler(this.eventLog1_EntryWritten);			// 			// btnListLog			// 			this.btnListLog.Location = new System.Drawing.Point(32, 16);			this.btnListLog.Name = "btnListLog";			this.btnListLog.Size = new System.Drawing.Size(152, 23);			this.btnListLog.TabIndex = 0;			this.btnListLog.Text = "List Event Logs";			this.btnListLog.Click += new System.EventHandler(this.btnListLog_Click);			// 			// btnReadLog			// 			this.btnReadLog.Location = new System.Drawing.Point(32, 46);			this.btnReadLog.Name = "btnReadLog";			this.btnReadLog.Size = new System.Drawing.Size(152, 23);			this.btnReadLog.TabIndex = 1;			this.btnReadLog.Text = "Read Event Logs";			this.btnReadLog.Click += new System.EventHandler(this.btnReadLog_Click);			// 			// btnWriteLog			// 			this.btnWriteLog.Location = new System.Drawing.Point(32, 77);			this.btnWriteLog.Name = "btnWriteLog";			this.btnWriteLog.Size = new System.Drawing.Size(152, 23);			this.btnWriteLog.TabIndex = 2;			this.btnWriteLog.Text = "Write Event Logs";			this.btnWriteLog.Click += new System.EventHandler(this.btnWriteLog_Click);	 		// 			// btnClearLog			// 			this.btnClearLog.Location = new System.Drawing.Point(32, 106);			this.btnClearLog.Name = "btnClearLog";			this.btnClearLog.Size = new System.Drawing.Size(152, 23);			this.btnClearLog.TabIndex = 3;			this.btnClearLog.Text = "Clear Logs";			this.btnClearLog.Click += new System.EventHandler(this.btnClearLog_Click);			// 			// btnCreateLog			// 			this.btnCreateLog.Location = new System.Drawing.Point(32, 137);			this.btnCreateLog.Name = "btnCreateLog";			this.btnCreateLog.Size = new System.Drawing.Size(152, 23);			this.btnCreateLog.TabIndex = 4;			this.btnCreateLog.Text = "Create Custom Logs";			this.btnCreateLog.Click += new System.EventHandler(this.btnCreateLog_Click);			// 			// btnDeleteLog			// 			this.btnDeleteLog.Location = new System.Drawing.Point(32, 168);			this.btnDeleteLog.Name = "btnDeleteLog";			this.btnDeleteLog.Size = new System.Drawing.Size(152, 23);			this.btnDeleteLog.TabIndex = 5;			this.btnDeleteLog.Text = "Delete Custom Logs";			this.btnDeleteLog.Click += new System.EventHandler(this.btnDeleteLog_Click);			// 			// btnRecNotice			// 			this.btnRecNotice.Location = new System.Drawing.Point(32, 199);			this.btnRecNotice.Name = "btnRecNotice";			this.btnRecNotice.Size = new System.Drawing.Size(152, 23);			this.btnRecNotice.TabIndex = 6;			this.btnRecNotice.Text = "Receive Event Notifications";			this.btnRecNotice.Click += new System.EventHandler(this.btnRecNotice_Click);			// 			// Form1			// 			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);			this.ClientSize = new System.Drawing.Size(216, 237);			this.Controls.Add(this.btnRecNotice);			this.Controls.Add(this.btnDeleteLog);			this.Controls.Add(this.btnCreateLog);			this.Controls.Add(this.btnClearLog);			this.Controls.Add(this.btnWriteLog);			this.Controls.Add(this.btnReadLog);			this.Controls.Add(this.btnListLog);			this.Name = "Form1";			this.Text = "Form1";			((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit();			this.ResumeLayout(false);		}		#endregion		/// <summary>		/// The main entry point for the application.		/// </summary>		[STAThread]		static void Main() 		{			Application.Run(new Form1());		}		private void btnListLog_Click(object sender, System.EventArgs e)		{			EventLog[] remoteEventLogs; 			// Gets logs on the local computer, gives remote computer name to get the logs on the remote computer.			remoteEventLogs = EventLog.GetEventLogs(System.Environment.MachineName);			Console.WriteLine("Number of logs on computer: " + remoteEventLogs.Length);			for ( int i=0; i<remoteEventLogs.Length; i++ )				Console.WriteLine("Log: " + remoteEventLogs[i].Log);		}		private void btnReadLog_Click(object sender, System.EventArgs e)		{			//logType can be Application, Security, System or any other Custom Log.			string logType = "Application";						/* In this case the EventLog constructor is passed a string variable for the log name and 			 * second argument mention the computer name that you want to read the logs from,			 * and that you have appropriate permissions to*/			EventLog ev = new EventLog(logType, System.Environment.MachineName);			int LastLogToShow = ev.Entries.Count;			if ( LastLogToShow <= 0 )				Console.WriteLine("No Event Logs in the Log :" + logType);			// Read the last 2 record in the specified log. 			int i;			for ( i = ev.Entries.Count - 1; i>= LastLogToShow - 2; i--)			{				EventLogEntry CurrentEntry = ev.Entries[i];				Console.WriteLine("Event ID : " + CurrentEntry.EventID);				Console.WriteLine("Entry Type : " + CurrentEntry.EntryType.ToString());				Console.WriteLine("Message :  " + CurrentEntry.Message + "\n");			}				ev.Close();			/* Similarly you can loop through all the entries in the log using			 * the entries collection as shown in the following commented code.			 * For Each entry In ev.Entries */    		}		private void btnWriteLog_Click(object sender, System.EventArgs e)		{			/* When writing to an event log, pass the computer name where 			 * the log resides.  Here the MachineName Property of the Environment class 			 * is used to determine the name of the local computer.  Assuming that you have 			 * the appropriate permissions, it is also easy to write to event logs on 			 * other computers.*/			//See if the Source exists. 			if ( ! ( EventLog.SourceExists("MySystemSource", System.Environment.MachineName)))				EventLog.CreateEventSource("MySystemSource", "System", System.Environment.MachineName);        					EventLog ev = new EventLog("System", System.Environment.MachineName, "MySystemSource");			/* Writing to system log, in the similar way you can write to other 			 * logs that you have appropriate permissions to write to			 */			ev.WriteEntry("Warning is written to system Log", EventLogEntryType.Warning, 10001);			MessageBox.Show("Warning is written to System Log");			ev.Close();		}		private void btnClearLog_Click(object sender, System.EventArgs e)		{			//Create an EventLog instance, and pass log name and MachineName where the log resides.			EventLog ev = new EventLog("Security", System.Environment.MachineName);			ev.Clear();			ev.Close();		}		private void btnCreateLog_Click(object sender, System.EventArgs e)		{			// Create the source, if it does not already exist.			if (! (EventLog.SourceExists("MyOldSource", System.Environment.MachineName)))				// Creating a new log				EventLog.CreateEventSource("MyOldSource", "MyNewLog", System.Environment.MachineName);			Console.WriteLine("CreatingEventSource");		}		private void btnDeleteLog_Click(object sender, System.EventArgs e)		{			string logName = "MyNewLog";			if ( EventLog.SourceExists("MyOldSource", System.Environment.MachineName))			{				logName = EventLog.LogNameFromSourceName("MyOldSource", System.Environment.MachineName);				EventLog.DeleteEventSource("MyOldSource", System.Environment.MachineName);				EventLog.Delete(logName, System.Environment.MachineName);				Console.WriteLine(logName + " deleted.");			}            		}		private void btnRecNotice_Click(object sender, System.EventArgs e)		{			// Create the source, if it does not already exist.			if (EventLog.SourceExists("MySource", System.Environment.MachineName) == false)			{				EventLog.CreateEventSource("MySource", "Application", System.Environment.MachineName);				Console.WriteLine("CreatingEventSource");			}			eventLog1.Log = "Application";			//Enable EnableRaisingEvents to true			eventLog1.EnableRaisingEvents = true;			EventLog.WriteEntry("MySource", "EntryWritten event is fired", EventLogEntryType.Information);		}		private void eventLog1_EntryWritten(object sender, System.Diagnostics.EntryWrittenEventArgs e)		{			if (e.Entry.Source  == "MySource")				Console.WriteLine("Entry written by my app. Message: " + e.Entry.Message);		}	}}

Verifique se os resultados

Para verificar os resultados, siga estes passos:
  1. No Microsoft Visual Studio .NET ou no Microsoft Visual Studio 2005, crie um novo Visual C# .NET ou aplicação do Visual C# 2005 Windows projecto. Por predefinição, é criado Form1.VB.
  2. Substitua o código em Form1.VB com o código é listado na secção "Concluída código lista" deste artigo.
  3. No menu Debug , clique em Iniciar para executar a aplicação.
  4. Efectuar várias acções no formulário.
  5. No menu Ver , clique em Server Explorer para verificar os resultados.
  6. Expanda Servers e, em seguida, expanda O nome do computador .
  7. Em nome do computador, expanda registos de eventos .

    Nota O nó de servidores do Server Explorer não está disponível no Academic Edition do Visual C# .NET. Nesses casos, pode utilizar o Visualizador de eventos do Windows para ver os resultados da aplicação.
  8. Verificar Server Explorer para verificar se todas as tarefas estão a ser executadas correctamente.
Referências
Para mais informações, visite o seguinte Web site da Microsoft:

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 815314 - Última Revisão: 11/14/2007 06:26:28 - Revisão: 2.6

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# 2005 Express Edition

  • kbmt kbeventservice kbnetwork kbmanaged kbprogramming kbhowtomaster kbeventlog kbhowto KB815314 KbMtpt
Comentários