Este artigo contém informações sobre como editar o registro. Antes de editar o registro, é importante entender como restaurá-lo caso ocorra algum problema. Para obter informações sobre como restaurar o registro, consulte o tópico da Ajuda "Restaurando o Registro" no Regedit.exe ou o tópico da Ajuda "Restaurando Chaves do Registro" no Regedt32.exe.
Fenômeno
Ao usar o ASP.NET para gravar uma nova "fonte de eventos" no log de eventos, você poderá receber a seguinte mensagem de erro: System.Security.SecurityException: O acesso ao registro solicitado não é
permitido
.
está em execução é O usuário padrão é ASPNET (NetworkService no IIS6.0) e esse usuário não tem permissão para criar uma "fonte de evento".
Nota sobrea solução
: (A Microsoft não dirá muito se você quiser assustá-lo, pois editar o registro fará com que o sistema trave). Se precisar resolver este problema, você deve criar uma "fonte de evento" por um usuário com direitos de administrador antes de executar este programa Asp.net. Existem vários métodos para criar "fontes de eventos".
O primeiro método
usa as etapas a seguir para criar uma "Fonte de eventos" em "Log do aplicativo" no editor de registro
1. Clique em “Iniciar” e depois em “Executar”.
2. Digite “regedit” na caixa “Abrir”.
3. Encontre a seguinte subchave:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication
4. Clique com o botão direito em "Aplicativo", clique em "Novo" e depois em "Item"
5. Renomeie este novo item para "Teste"
6. Fechar o Editor do Registro
O segundo método
possui uma classe EventLogInstaller no namespace System.Diagnostics. Ele cria e configura logs de eventos que seu aplicativo lê e grava em tempo de execução. Através das etapas a seguir, podemos usar a classe EventLogInstaller para criar uma "fonte da indústria de eventos"
1. Use VB.NET ou C# para criar uma "biblioteca de classes" chamada EventLogSourceInstaller.
2. Adicione uma referência a System.Configuration.Install.dll, no projeto.
3. Renomeie o Class.VbClass.cs gerado automaticamente para MyEventLogInstaller.vbMyEventLogInstaller.cs.
4. Substitua o conteúdo em MyEventLogInstaller.vb ou MyEventLogInstaller.cs pelo seguinte código:
Exemplo do Visual Basic .NET
ImportsSystem.Diagnostics
Importa System.Configuration.Install
Importa System.ComponentModel
<RunInstaller(True)> _
Classe pública MyEventLogInstaller
Herda o instalador
MyEventLogInstaller privado como EventLogInstaller
Public Sub New()
' Cria uma instância de 'EventLogInstaller'.
meuEventLogInstaller = Novo EventLogInstaller()
' Defina a 'Fonte' do log de eventos..computerDownloadFilesarticle27, a ser criado.
myEventLogInstaller.Source = "TESTE"
' Define o 'Log' no qual a fonte é criada.
myEventLogInstaller.Log = "Aplicativo"
' Adicione myEventLogInstaller a 'InstallerCollection'.
Installers.Add(meuEventLogInstaller)
Finalizar sub
Fim da classe
Visual C# .NET Amostra
usando o sistema;
usando System.Diagnostics;
usando System.ComponentModel;
usando System.Configuration.Install;
namespace EventLogSourceInstaller
{
[RunInstaller (verdadeiro)]
classe pública MyEventLogInstaller: Instalador
{
private EventLogInstaller myEventLogInstaller;
público MyEventLogInstaller()
{
//Cria instância do EventLogInstaller
myEventLogInstaller = new EventLogInstaller();
// Defina a fonte do log de eventos..computerDownloadFilesarticle27, a ser criado.
myEventLogInstaller.Source = "TEST"
// Define o log em que a fonte é criada
myEventLogInstaller.Log = "Application";
// Adicione myEventLogInstaller à coleção de instaladores.
Installers.Add(meuEventLogInstaller);
}
}
}
5. Crie este projeto e obtenha EventLogSourceInstaller.dll.
6. Abra o prompt de comando do Visual Studio .NET e vá para o diretório onde EventLogSourceInstaller.dll está localizado.
7. Execute este comando para criar a "fonte do evento": InstallUtil EventLogSourceInstaller.dll
Informações mais detalhadas
Reproduzimos o erro acima e resolvemos este problema criando uma aplicação Web.
1. Use VB.Net ou C# para construir um aplicativo Web Asp.net.
2. Substitua o código em WebForm1.aspx pelo seguinte código:
Exemplo do Visual Basic .NET
<%@ Idioma da página="vb" AutoEventWireup="true" %>
<%@ Import namespace="System.Diagnostics" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<linguagem de script="VB" runat="servidor">
Sub WriteEvent_Click(Src As Object..computerDownloadFilesarticle27, e As EventArgs)
Dim ev As New EventLog("Aplicativo")
'Nome da fonte do evento
ev.Source = "TEST"
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Application")
Tente
ev.WriteEntry(TextBox1.Text)
Pegue b como exceção
Response.write ("WriteEntry " & b.message & "<br>")
Finalizar tentativa
ev=Nada
Finalizar sub
</script>
<corpo>
<form id="Form1" runat="servidor">
Mensagem do evento:
<asp:textbox id="TextBox1" runat="servidor" Width="233px"></asp:textbox>
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Gravar no log de eventos"></asp:button>
</formulário>
</corpo>
</HTML>
Exemplo Visual C# .NET
<%@ Idioma da página="c#" AutoEventWireup="true" %>
<%@ Import namespace="System.Diagnostics" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<linguagem de script="C#" runat="servidor">
void WriteEvent_Click(Object Src..computerDownloadFilesarticle27, EventArgs e)
{
EventLog ev = new EventLog("Aplicativo");
//Nome da fonte do evento
ev.Source = "TEST";
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Aplicativo")
;
{
ev.WriteEntry(TextBox1.Text);
}
pegar (Exceção b)
{
Response.Write("WriteEntry " + b.Message + "<br>");
}
ev = nulo;
}
</script>
<corpo>
<form id="Form1" runat="servidor">
Mensagem do evento:
<asp:textbox id="TextBox1" runat="servidor" Width="233px"></asp:textbox>
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Gravar no log de eventos"></asp:button>
</formulário>
</corpo>
</HTML>
3. Pressione F5 para iniciar este projeto.
4. Insira alguns caracteres no TextBox e clique em Gravar no log de eventos.
5. A mensagem de erro mencionada na seção “Sintomas” acima é exibida.
6. Para resolver este problema, comente a seguinte linha de código em Webform1.aspx
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Aplicativo")
; Reinicie este projeto.
http://www.cnblogs.com/niit007/archive/2006/08/13/475510.html