Este artículo contiene información sobre cómo editar el registro. Antes de editar el registro, es importante comprender cómo restaurarlo si ocurre un problema. Para obtener información acerca de cómo restaurar el registro, consulte el tema de ayuda "Restauración del registro" en Regedit.exe o el tema de ayuda "Restauración de claves del registro" en Regedt32.exe.
Fenómeno
Cuando utiliza ASP.NET para escribir un nuevo "origen de eventos" en el registro de eventos, puede recibir el siguiente mensaje de error: System.Security.SecurityException: el acceso al registro solicitado no está permitido.
La razón por la cual
el proceso ASP.NET. se está ejecutando es El usuario predeterminado es ASPNET (NetworkService en IIS6.0) y este usuario no tiene permiso para crear una "fuente de eventos".
Nota sobrela solución
: (Microsoft no dirá mucho si quiere asustarlo, por ejemplo, editar el registro provocará que el sistema falle). Si necesita resolver este problema, debe crear una "fuente de eventos" por parte de un usuario con derechos de administrador antes de ejecutar este programa Asp.net. Existen varios métodos para crear "fuentes de eventos".
El primer método
utiliza los siguientes pasos para crear un "Fuente de evento" en "Registro de aplicación" en el editor de registro
1. Haga clic en "Inicio" y luego en "Ejecutar".
2. Ingrese "regedit" en el cuadro "Abrir".
3. Busque la siguiente subclave:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication
4. Haga clic derecho en "Aplicación", haga clic en "Nuevo" y luego haga clic en "Elemento"
5. Cambie el nombre de este nuevo elemento a "Prueba"
6. Cerrar el editor del registro
El segundo método
tiene una clase EventLogInstaller en el espacio de nombres System.Diagnostics. Crea y configura registros de eventos que su aplicación lee y escribe en tiempo de ejecución. Mediante los siguientes pasos, podemos utilizar la clase EventLogInstaller para crear una "fuente de la industria de eventos"
1. Utilice VB.NET o C# para crear una "biblioteca de clases" llamada EventLogSourceInstaller.
2. Agregue una referencia a System.Configuration.Install.dll, en el proyecto.
3. Cambie el nombre del Class.VbClass.cs generado automáticamente a MyEventLogInstaller.vbMyEventLogInstaller.cs.
4. Reemplace el contenido de MyEventLogInstaller.vb o MyEventLogInstaller.cs con el siguiente código:
Ejemplo de Visual Basic .NET
ImportacionesSystem.Diagnostics
Importa Sistema.Configuración.Instalación
Importa System.ComponentModel
<RunInstaller(True)> _
Clase pública MyEventLogInstaller
Hereda el instalador
MyEventLogInstaller privado como EventLogInstaller
Public Sub New()
' Crea una instancia de 'EventLogInstaller'.
myEventLogInstaller = Nuevo EventLogInstaller()
' Establece la 'Fuente' del registro de eventos...computerDownloadFilesarticle27, que se creará.
myEventLogInstaller.Source = "PRUEBA"
' Establece el 'Registro' en el que se crea la fuente.
myEventLogInstaller.Log = "Aplicación"
'Agrega myEventLogInstaller a 'InstallerCollection'.
Instaladores.Add(myEventLogInstaller)
Subtítulo final
de clase final
de Visual C# .NET
usando Sistema;
utilizando System.Diagnostics;
usando System.ComponentModel;
usando System.Configuration.Install;
espacio de nombres EventLogSourceInstaller
{
[EjecutarInstaller(verdadero)]
clase pública MyEventLogInstaller: Instalador
{
privado EventLogInstaller myEventLogInstaller
público MyEventLogInstaller();
{
//Crear instancia de EventLogInstaller
myEventLogInstaller = new EventLogInstaller();
// Establece el origen del registro de eventos...computerDownloadFilesarticle27, que se creará.
myEventLogInstaller.Source = "TEST";
// Establece el registro en el que se crea la fuente
myEventLogInstaller.Log = "Aplicación";
// Agregue myEventLogInstaller a la colección de instaladores.
Instaladores.Add(myEventLogInstaller);
}
}
}
5. Compile este proyecto y obtenga EventLogSourceInstaller.dll.
6. Abra el símbolo del sistema de Visual Studio .NET y vaya al directorio donde se encuentra EventLogSourceInstaller.dll.
7. Ejecute este comando para crear el "origen del evento": InstallUtil EventLogSourceInstaller.dll
Información más detallada
Reproducimos el error anterior y solucionamos este problema creando una aplicación web.
1. Utilice VB.Net o C# para crear una aplicación web Asp.net.
2. Reemplace el código en WebForm1.aspx con el siguiente código:
Ejemplo de Visual Basic .NET
<%@ Idioma de página="vb" AutoEventWireup="true" %>
<%@ Importar espacio de nombres="System.Diagnostics" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transicional//ES">
<HTML>
<lenguaje de escritura="VB" runat="servidor">
Sub WriteEvent_Click(Src como objeto...computadoraDownloadFilesarticle27, y como EventArgs)
Atenuar ev como nuevo registro de eventos ("Aplicación")
'Nombre de la fuente del evento
ev.Source = "TEST"
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Application")
Pruebe
ev.WriteEntry(TextBox1.Text)
Captura b como excepción
Response.write ("WriteEntry" & b.message & "<br>")
Finalizar intento
ev=Nada
Subtítulo final
</guión>
<cuerpo>
<form id="Form1" runat="servidor">
Mensaje del evento:
<asp:textbox id="TextBox1" runat="servidor" Ancho="233px"></asp:textbox>
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Escribir en el registro de eventos"></asp:button>
</formulario>
</cuerpo>
</HTML>
Ejemplo de Visual C# .NET
<%@ Idioma de página="c#" AutoEventWireup="true" %>
<%@ Importar espacio de nombres="System.Diagnostics" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transicional//ES">
<HTML>
<lenguaje de escritura="C#" runat="servidor">
void WriteEvent_Click(Object Src..computerDownloadFilesarticle27, EventArgs e)
{
EventLog ev = nuevo EventLog("Aplicación");
//Nombre de la fuente del evento
ev.Source = "TEST";
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Aplicación")
;
{
ev.WriteEntry(TextBox1.Text);
}
captura (Excepción b)
{
Response.Write("WriteEntry " + b.Mensaje + "<br>");
}
ev = nulo;
}
</guión>
<cuerpo>
<form id="Form1" runat="servidor">
Mensaje del evento:
<asp:textbox id="TextBox1" runat="servidor" Ancho="233px"></asp:textbox>
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Escribir en el registro de eventos"></asp:button>
</formulario>
</cuerpo>
</HTML>
3. Presione F5 para iniciar este proyecto.
4. Ingrese algunos caracteres en el cuadro de texto y haga clic en Escribir en el registro de eventos.
5. Aparece el mensaje de error mencionado en la sección "Síntomas" anterior.
6. Para resolver este problema, comente la siguiente línea de código en Webform1.aspx
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Aplicación")
; Reinicie este proyecto.
http://www.cnblogs.com/niit007/archive/2006/08/13/475510.html