PRB: Messaggio di errore "Accesso al registro richiesto non è consentito" durante il tentativo di scrivere nuovo EventSource nel registro eventi di applicazione ASP.NET

Sintomi

Quando si utilizza ASP.NET per creare una nuova origine eventi nel registro eventi, è che venga visualizzato il seguente messaggio di errore:
System.Security.SecurityException: Accesso al registro richiesto non è consentito.

Causa

Per impostazione predefinita, il token dell'utente del processo di lavoro ASP.NET è ASPNET (o NetworkService per le applicazioni eseguite su Internet Information Services [IIS] 6.0). Il problema nella sezione "Sintomi" si verifica perché l'account non dispone dei diritti utente corretti per creare un'origine eventi.

Risoluzione

Importante Questa sezione, metodo o attività contiene passaggi su come modificare il Registro di sistema. Tuttavia, una modifica errata del registro di sistema potrebbe causare gravi problemi. Pertanto, assicurarsi di seguire attentamente i passaggi. Per maggiore protezione, eseguire il backup del Registro di sistema prima di modificarlo. Cosicché sia possibile ripristinare il Registro di sistema se si verifica un problema. Per ulteriori informazioni su come eseguire il backup e ripristinare il Registro di sistema, fare clic sul numero dell'articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base:
322756 come eseguire il backup e ripristinare il Registro di sistema Windows
Per risolvere questo problema, un utente con diritti amministrativi deve creare l'origine eventi prima di eseguire l'applicazione Web ASP.NET. Per creare un'origine eventi, utilizzare uno dei metodi descritti di seguito.

Primo approccio

Creare un'origine eventi nel registro eventi dell'applicazione nell'Editor del Registro di sistema. A tale scopo, attenersi alla seguente procedura:
  1. Fare clic su Starte quindi fare clic su
    L'esecuzione.
  2. Nella casella di testo Apri , digitare
    regedit.
  3. Cercare la seguente sottochiave del Registro di sistema:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
  4. Pulsante destro del mouse sulla sottochiave applicazione , scegliere Nuovo, quindi chiave.
  5. Tipo di TEST per il nome della chiave.
  6. Chiudere l'Editor del Registro di sistema.

Secondo approccio

La classe EventLogInstaller dello spazio dei nomi System. Diagnostics consente di installare e configurare un log eventi che l'applicazione legge o scrive durante l'esecuzione. È possibile creare un'origine eventi utilizzando EventLogInstaller. A tale scopo, attenersi alla seguente procedura:
  1. Utilizzare Microsoft Visual Basic .NET o Microsoft Visual C# .NET per creare una nuova Libreria di classi denominato EventLogSourceInstaller. Per impostazione predefinita, il file Class1. vb o
    Viene creato il file Class1. cs .
  2. In Esplora soluzioni, fare doppio clic
    EventLogSourceInstaller, quindi fare clic su Aggiungi riferimento.
  3. Nella finestra di dialogo Aggiungi riferimento , fare doppio clic su Installe quindi fare clic su
    OK.
  4. Rinominare il Class1.vb\Class1.cs in MyEventLogInstaller.vb\MyEventLogInstaller.cs.
  5. Sostituire il codice esistente nella MyEventLogInstaller.vb o MyEventLogInstaller.cs con il seguente codice di esempio:

    Esempio di Visual Basic .NET
    Imports System.DiagnosticsImports 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

    Esempio di 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. Scegliere Genera soluzione per creare menu di compilazione
    EventLogSourceInstaller.dll.
  7. Aprire il prompt dei comandi di Visual Studio .NET.
  8. Al prompt dei comandi, passare alla cartella dove
    EventLogSourceInstaller.dll si trova.
  9. Eseguire il comando seguente per creare EventSource:
    InstallUtil EventLogSourceInstaller.dll

Ulteriori informazioni

Procedura per riprodurre il comportamento

  1. Utilizzare Visual Basic .NET o Visual C# .NET per creare una nuova
    Applicazione Web ASP.NET. Per impostazione predefinita,
    Viene creato il file WebForm1. aspx .
  2. Nella visualizzazione HTML di WebForm1. aspx, sostituire il codice esistente con il codice di esempio seguente:

    Esempio di Visual Basic .NET
    <%@ 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>

    Esempio di 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. Dal menu Debug , fare clic su
    Iniziare a visualizzare la pagina WebForm1. aspx nel browser.
  4. Digitare il testo nella casella di testoe quindi fare clic su
    Scrivi nel registro eventi.
  5. Viene visualizzato il messaggio di errore descritto nella sezione "Sintomi" di questo articolo.
  6. Per risolvere questo problema, creare un'origine eventi, come descritto nella sezione "Risoluzione" e impostare come commento il codice riportato di seguito in
    WebForm1.aspx :
    EventLog.CreateEventSource(ev.Source, "Application")
  7. Ripetere i passaggi 3 e 4.
Proprietà

ID articolo: 329291 - Ultima revisione: 30 gen 2017 - Revisione: 1

Feedback