PRB : Message d'erreur « Accès au registre demandé non autorisé » lorsqu'une application ASP.NET tente d'écrire un nouveau EventSource dans l'EventLog

Cet article peut contenir des liens vers des informations en langue anglaise (pas encore traduites).
IMPORTANT : cet article contient des informations sur la modification du Registre. Avant de modifier le Registre, faites-en une sauvegarde et vérifiez que vous savez comment le restaurer en cas de problème. Pour plus d'informations sur la sauvegarde, la restauration et la modification du Registre, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft.
256986 Description du Registre de Microsoft Windows
Symptômes
Lorsque vous utilisez ASP.NET pour créer une source d'événement dans le journal des événements, le message d'erreur suivant peut s'afficher :
System.Security.SecurityException : Accès au registre demandé non autorisé.
Cause
Par défaut, le jeton utilisateur du processus de traitement ASP.NET est ASPNET (ou NetworkService pour les applications qui s'exécutent sur les services Internet [IIS] 6.0). Le problème décrit dans la section « Symptômes » se produit car votre compte ne dispose pas des droits de l'utilisateur corrects pour créer une source d'événement.
Résolution
AVERTISSEMENT : toute utilisation incorrecte de l'Éditeur du Registre peut générer des problèmes sérieux, pouvant vous obliger à réinstaller votre système d'exploitation. Microsoft ne peut pas garantir que les problèmes résultant d'une mauvaise utilisation de l'Éditeur du Registre puissent être résolus. Vous assumez l'ensemble des risques liés à l'utilisation de cet outil. Pour résoudre ce problème, un utilisateur qui dispose de droits administratifs doit créer la source d'événement avant que vous exécutiez l'application Web ASP.NET. Pour créer une source d'événement, appliquez l'une des méthodes suivantes.

Première méthode

Créez une source d'événement sous le journal des événements Application dans l'Éditeur du Registre. Pour cela, procédez comme suit :
  1. Cliquez sur Démarrer, puis sur Exécuter.
  2. Dans la zone de texte Ouvrir, tapez regedit.
  3. Recherchez la sous-clé de Registre suivante :
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
  4. Cliquez avec le bouton droit sur la sous-clé Application, pointez sur Nouveau, puis cliquez sur Clé.
  5. Tapez TEST comme nom pour la clé.
  6. Fermez l'Éditeur du Registre.

Deuxième méthode

La classe EventLogInstaller de l'espace de noms System.Diagnostics vous permet d'installer et de configurer un journal des événements dans lequel votre application lit ou écrit lorsqu'elle s'exécute. Vous pouvez créer une source d'événement à l'aide d'EventLogInstaller. Pour cela, procédez comme suit :
  1. Utilisez Microsoft Visual Basic .NET ou Microsoft Visual C# .NET pour créer une Bibliothèque de classes nommée EventLogSourceInstaller. Par défaut, le fichier Class1.vb ou Class1.cs est créé.
  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur EventLogSourceInstaller, puis cliquez sur Ajouter une référence.
  3. Dans la boîte de dialogue Ajouter une référence, double-cliquez sur System.Configuration.Install.dll, puis cliquez sur OK.
  4. Renommez Class1.vb\Class1.cs en MyEventLogInstaller.vb\MyEventLogInstaller.cs.
  5. Remplacez le code existant dans MyEventLogInstaller.vb ou MyEventLogInstaller.cs par l'exemple de code suivant :

    Exemple de code Visual Basic .NET
    Imports System.DiagnosticsImports System.Configuration.InstallImports 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 
    Exemple de code 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. Dans le menu Générer, cliquez sur Générer la solution pour créer EventLogSourceInstaller.dll.
  7. Ouvrez l'invite de commandes Visual Studio .NET.
  8. À l'invite, accédez au dossier dans lequel se trouve EventLogSourceInstaller.dll.
  9. Exécutez la commande suivante pour créer l'EventSource :
    InstallUtil EventLogSourceInstaller.dll
Plus d'informations

Procédure pour reproduire le problème

  1. Utilisez Visual Basic .NET ou Visual C# .NET pour créer une Application Web ASP.NET. Par défaut, le fichier WebForm1.aspx est créé.
  2. En mode HTML de WebForm1.aspx, remplacez le code existant par l'exemple de code suivant :

    Exemple de code 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>
    Exemple de code 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. Dans le menu Déboguer, cliquez sur Démarrer pour afficher la page WebForm1.aspx dans le navigateur.
  4. Tapez du texte dans TextBox, puis cliquez sur Write to event log.
  5. Le message d'erreur mentionné dans la section « Symptômes » de cet article s'affiche.
  6. Pour résoudre ce problème, créez un EventSource tel que discuté dans la section « Résolution » et commentez le code suivant dans WebForm1.aspx :
    EventLog.CreateEventSource(ev.Source, "Application")
  7. Répétez les étapes 3 et 4.
Propriétés

ID d'article : 329291 - Dernière mise à jour : 12/04/2007 03:37:32 - Révision : 2.6

Microsoft ASP.NET 1.1, Microsoft Visual Basic .NET 2003 Initiation, Microsoft Visual C# .NET 2003 Initiation, Microsoft ASP.NET 1.0, Microsoft Visual Basic .NET 2002 Initiation, Microsoft Visual C# .NET 2002 Initiation, Microsoft Internet Information Services 5.0, Microsoft Internet Information Services version 5.1, Microsoft Internet Information Services 6.0

  • kberrmsg kbwebforms kbsecurity kbprb KB329291
Commentaires