DetailPage-MSS-KB

Base de connaissances

Numéro d'article: 329291 - Dernière mise à jour: mardi 4 décembre 2007 - Version: 2.6

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  (http://support.microsoft.com/kb/256986/ ) Description du Registre de Microsoft Windows

Sommaire

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.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 
    
    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.

Références

Pour plus d'informations, reportez-vous au site Web de Microsoft aux adresses suivantes (en anglais) :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbwlkWalkthroughCreatingEventLogInstallers.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbwlkWalkthroughCreatingEventLogInstallers.asp)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdiagnosticseventlogclasstopic.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdiagnosticseventlogclasstopic.asp)

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • 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 6.0
Mots-clés : 
kberrmsg kbwebforms kbsecurity kbprb KB329291
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Partager
Options de support supplémentaire
Forums du support Microsoft Community
Nous contacter directement
Trouver un partenaire Microsoft Certified Partner
Microsoft Store