PRB: "Acceso de registro solicitado no está permitido" Error Message When ASP.NET Application intenta escribir el nuevo origen de eventos en EventLog

Seleccione idioma Seleccione idioma
Id. de artículo: 329291 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando utiliza ASP.NET para crear un nuevo origen de eventos en el registro de sucesos, puede recibir el siguiente mensaje de error:
System.Security.SecurityException: No se permite acceso al registro solicitado.

Causa

De forma predeterminada, el token de usuario el proceso de trabajo de ASP.NET es ASPNET (o de NetworkService para aplicaciones que se ejecutan en servicios de Internet Information Server [IIS] 6.0). El problema en la sección "Síntomas" se produce porque la cuenta no tiene los derechos de usuario correctos para crear un origen de eventos.

Solución

importante Esta sección, el método o la tarea contiene pasos que indican cómo modificar el registro. Sin embargo, pueden producirse problemas graves si modifica incorrectamente el registro. Por tanto, asegúrese de que siga estos pasos cuidadosamente. Realice una para agregar protección, copia de seguridad del registro antes de modificarlo. A continuación, puede restaurar el registro si se produce un problema. Para obtener más información acerca de cómo realizar una copia de seguridad y restaurar el registro, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
322756Cómo realizar una copia de seguridad y restaurar el registro de Windows
Para resolver este problema, un usuario con derechos administrativos debe crear el origen de eventos antes de ejecutar la aplicación Web de ASP.NET. Para crear un origen de eventos, utilice uno de los métodos siguientes.

Primer enfoque

Crear un origen de eventos en el registro de sucesos de aplicación en el Editor del registro. Para ello, siga estos pasos:
  1. Haga clic en Inicio y, a continuación, haga clic en Ejecutar .
  2. En el cuadro de texto Abrir , escriba regedit .
  3. Busque la siguiente subclave del Registro:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
  4. Haga clic con el botón secundario en la subclave de aplicación , seleccione nuevo y, a continuación, haga clic en clave .
  5. Tipo de prueba para el nombre de clave.
  6. Cierre el Editor del registro.

Segundo enfoque

La clase EventLogInstaller en el espacio de nombres System.Diagnostics permite instalar y configurar un registro de eventos que la aplicación lee o escribe mientras la ejecución. Puede crear un origen de eventos utilizando EventLogInstaller. Para ello, siga estos pasos:
  1. Utilice Microsoft Visual Basic .NET o Microsoft Visual C# .NET para crear una nueva Biblioteca de clases denominado EventLogSourceInstaller. De forma predeterminada, se crea el archivo Class1.vb o el archivo de Class1.cs .
  2. En el Explorador de soluciones, haga clic con el botón secundario del mouse en EventLogSourceInstaller y, a continuación, haga clic en Agregar referencia .
  3. En el cuadro de diálogo Agregar referencia , haga doble clic en System.Configuration.Install.dll y, a continuación, haga clic en Aceptar .
  4. Cambie el nombre el Class1.vb\Class1.cs MyEventLogInstaller.vb\MyEventLogInstaller.cs.
  5. Reemplace el código existente en MyEventLogInstaller.vb o MyEventLogInstaller.cs con el siguiente ejemplo de código:

    ejemplo de Visual Basic .NET
    Imports System.Diagnostics
    Imports System.Configuration.Install
    Imports System.ComponentModel
    
    <RunInstaller(True)> _
    Public Class MyEventLogInstaller
        Inherits Installer
        Private myEventLogInstaller As EventLogInstaller
    
        Public Sub New()
            ' Create an instance of 'EventLogInstaller'.
            myEventLogInstaller = New EventLogInstaller()
            ' Set the 'Source' of the event log, to be created.
            myEventLogInstaller.Source = "TEST"
            ' Set the 'Log' that the source is created in.
            myEventLogInstaller.Log = "Application"
            ' Add myEventLogInstaller to 'InstallerCollection'.
            Installers.Add(myEventLogInstaller)
        End Sub 
    End Class 
    
    Ejemplo de visual C# .NET
    using System;
    using System.Diagnostics;
    using System.ComponentModel;
    using System.Configuration.Install;
    
    
    namespace EventLogSourceInstaller 
    {
    	[RunInstaller(true)]
    	public class MyEventLogInstaller : Installer
    	{
    		private EventLogInstaller myEventLogInstaller;
    
    		public MyEventLogInstaller()
    		{
    			//Create Instance of EventLogInstaller
    			myEventLogInstaller = new EventLogInstaller();
    
    			// Set the Source of Event Log, to be created.
    			myEventLogInstaller.Source = "TEST";
    
    			// Set the Log that source is created in
    			myEventLogInstaller.Log = "Application";
    			
    			// Add myEventLogInstaller to the Installers Collection.
    			Installers.Add(myEventLogInstaller);
    		}
    	}
    }
    
    
  6. En el menú Generar , haga clic en Generar solución para crear EventLogSourceInstaller.dll .
  7. Abrir el el símbolo del sistema de Visual Studio .NET.
  8. En el símbolo del sistema, cambie a la carpeta donde se encuentra EventLogSourceInstaller.dll .
  9. Ejecute el comando siguiente para crear el origen de eventos:
    InstallUtil EventLogSourceInstaller.dll

Más información

Pasos para reproducir el comportamiento

  1. Utilice Visual Basic .NET o Visual C# .NET para crear una nueva Aplicación Web ASP.NET . De forma predeterminada, se crea el archivo WebForm1.aspx .
  2. En la vista HTML de WebForm1.aspx , reemplace el código existente con el siguiente ejemplo de código:

    Visual Basic .NET ejemplo
    <%@ Page Language="vb" AutoEventWireup="true" %>
    <%@ Import namespace="System.Diagnostics" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    	<script language="VB" runat="server">
    	Sub WriteEvent_Click(Src As Object, e As EventArgs)
    	Dim ev As New EventLog("Application")
    	' Event's Source name
    	ev.Source = "TEST" 
    	
    	EventLog.CreateEventSource(ev.Source, "Application")
    	
    Try
    	 ev.WriteEntry(TextBox1.Text)
    	Catch b as exception
    	 Response.write ("WriteEntry " & b.message & "<br>")
    	End Try
    	ev = Nothing
    	End Sub
    	</script>
    
    	<body>
    		<form id="Form1" runat="server">
    			Event message: 
    			<asp:textbox id="TextBox1" runat="server" Width="233px"></asp:textbox>
    			<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Write to event log"></asp:button>
    		</form>
    	</body>
    </HTML>
    
    en el Ejemplo de visual C# .NET
    <%@ Page Language="c#" AutoEventWireup="true" %>
    <%@ Import namespace="System.Diagnostics" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    	<script language="C#" runat="server">
    	void WriteEvent_Click(Object Src, EventArgs e)
    	{
    	EventLog ev = new EventLog("Application");
    	// Event's Source name
    	ev.Source = "TEST";  
    	
    	EventLog.CreateEventSource(ev.Source, "Application");
    
    			try
    			{
    				ev.WriteEntry(TextBox1.Text);
    			}
    			catch (Exception b)
    			{
    				Response.Write("WriteEntry " + b.Message + "<br>");
    			}
    			ev = null;
    	}
    	</script>
    
    	<body>
    		<form id="Form1" runat="server">
    			Event message: 
    			<asp:textbox id="TextBox1" runat="server" Width="233px"></asp:textbox>
    			<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Write to event log"></asp:button>
    		</form>
    	</body>
    </HTML>
  3. En el menú Depurar , haga clic en Inicio para ver la página WebForm1.aspx en el explorador.
  4. Escriba algún texto en TextBox y, a continuación, haga clic en escribir en registro de sucesos .
  5. El mensaje de error que se describe en la sección "Síntomas" aparece la sección de este artículo.
  6. Para resolver este problema, cree un origen de eventos como se describe en la sección "Solución" y el código siguiente en WebForm1.aspx de comentario:
    EventLog.CreateEventSource(ev.Source, "Application")
  7. Repita los pasos 3 y 4.

Referencias

Para obtener más información, visite los siguientes sitios Web de Microsoft (pueden estar en inglés):
http://msdn2.microsoft.com/en-us/library/f5dcf6h3(vs.71).aspx
http://msdn2.microsoft.com/en-us/library/system.diagnostics.eventlog(vs.71).aspx

Propiedades

Id. de artículo: 329291 - Última revisión: lunes, 3 de diciembre de 2007 - Versión: 2.10
La información de este artículo se refiere a:
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Internet Information Services 5.0
  • Microsoft Internet Information Services version 5.1
  • Servicios de Microsoft Internet Information Server 6.0
Palabras clave: 
kbmt kberrmsg kbwebforms kbsecurity kbprb KB329291 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 329291

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com