PROBLEMA: Mensagem de erro "Acesso de Registro solicitada não é permitido" quando o aplicativo ASP.NET tenta gravar novo EventSource no log de eventos

Traduções deste artigo Traduções deste artigo
ID do artigo: 329291 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Quando você usa o ASP.NET para criar uma nova fonte de evento no log de eventos, você receberá a seguinte mensagem de erro:
System.Security.SecurityException: Acesso ao Registro solicitada não é permitido.

Causa

Por padrão, o token de usuário do processo de operador do ASP.NET é ASPNET (ou NetworkService para aplicativos que são executados no IIS [] 6.0). O problema na seção "Sintomas" ocorre porque sua conta não tem direitos de usuário corretos para criar uma fonte de evento.

Resolução

importante Esta seção, método ou tarefa contém etapas que informam sobre como modificar o registro. No entanto, sérios problemas poderão ocorrer se você modificar o registro incorretamente. Por isso, certifique-se que você execute essas etapas cuidadosamente. Para proteção adicional, fazer backup do registro antes de modificá-lo. Em seguida, você pode restaurar o registro se ocorrer um problema. Para obter mais informações sobre como fazer backup e restaurar o registro, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
322756Como fazer backup e restaurar o registro no Windows
Para resolver esse problema, um usuário com direitos administrativos deve criar a fonte do evento antes de executar o aplicativo ASP.NET. Para criar uma fonte de evento, use um dos seguintes métodos.

Abordagem primeira

Crie uma fonte de evento em log de eventos do aplicativo no Editor do Registro. Para fazer isso, execute as seguintes etapas:
  1. Clique em Iniciar e, em seguida, clique em Executar .
  2. Na caixa de texto Abrir , digite regedit .
  3. Localize a seguinte subchave do Registro:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
  4. Clique com o botão direito do mouse subchave Application , aponte para novo e, em seguida, clique em chave .
  5. Tipo de teste para o nome da chave.
  6. Feche o Editor do Registro.

Segunda abordagem

A classe EventLogInstaller no namespace System.Diagnostics permite que você instalar e configurar um log de eventos que seu aplicativo lê a partir de ou grava em durante a execução. Você pode criar uma fonte de evento usando EventLogInstaller. Para fazer isso, execute as seguintes etapas:
  1. Use o Microsoft Visual Basic .NET ou Microsoft Visual translation from VPE for Csharp .NET para criar uma nova Biblioteca de classes chamado EventLogSourceInstaller. Por padrão, o arquivo Class1.vb ou no arquivo Class1.cs é criado.
  2. No Solution Explorer, clique com o botão direito do mouse EventLogSourceInstaller e, em seguida, clique em Adicionar referências .
  3. Na caixa de diálogo Add Reference , clique duas vezes em System.Configuration.Install.dll e, em seguida, clique em OK .
  4. Renomeie o Class1.vb\Class1.cs para MyEventLogInstaller.vb\MyEventLogInstaller.cs.
  5. Substitua o código existente no MyEventLogInstaller.vb ou MyEventLogInstaller.cs com o código de exemplo a seguir:

    .NET Visual Basic Sample
    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 
    
    Visual translation from VPE for Csharp .NET exemplo
    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. No menu Build , clique em Build Solution para criar EventLogSourceInstaller.dll .
  7. Abra o prompt de comando do Visual Studio .NET.
  8. No prompt de comando, mude para a pasta onde EventLogSourceInstaller.dll está localizado.
  9. Execute o seguinte comando para criar a EventSource:
    InstallUtil EventLogSourceInstaller.dll

Mais Informações

Passos para reproduzir o problema

  1. Use o Visual Basic .NET ou Visual translation from VPE for Csharp .NET para criar um novo Aplicativo Web ASP.NET . Por padrão, arquivo WebForm1.aspx é criado.
  2. No modo de exibição HTML de WebForm1.aspx , substitua o código existente com o código de exemplo a seguir:

    Visual Basic .NET exemplo
    <%@ 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>
    
    Visual translation from VPE for Csharp .NET exemplo
    <%@ 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. No menu Debug , clique em Iniciar para exibir a página WebForm1.aspx no navegador.
  4. Digite algum texto em TextBox e clique em gravar em log de eventos .
  5. A mensagem de erro que é discutida em "Sintomas" seção deste artigo aparece.
  6. Para resolver esse problema, crie uma fonte de evento conforme discutido na seção "Resolução" e comentar o código a seguir em WebForm1.aspx :
    EventLog.CreateEventSource(ev.Source, "Application")
  7. Repita as etapas 3 e 4.

Referências

Para obter mais informações, visite os seguintes sites:
http://msdn2.microsoft.com/en-us/library/f5dcf6h3(vs.71).aspx
http://msdn2.microsoft.com/en-us/library/system.diagnostics.eventlog(vs.71).aspx

Propriedades

ID do artigo: 329291 - Última revisão: segunda-feira, 3 de dezembro de 2007 - Revisão: 2.10
A informação contida neste artigo aplica-se 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
  • Microsoft Internet Information Services 6.0
Palavras-chave: 
kbmt kberrmsg kbwebforms kbsecurity kbprb KB329291 KbMtpt
Tradução automática
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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 329291

Submeter comentários

 

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