Cet article contient des informations sur la modification du registre. Avant de modifier le registre, il est important de comprendre comment restaurer le registre en cas de problème. Pour plus d'informations sur la façon de restaurer le Registre, consultez la rubrique d'aide « Restauration du Registre » dans Regedit.exe ou la rubrique d'aide « Restauration des clés de Registre » dans Regedt32.exe.
Phénomène
Lorsque vous utilisez ASP.NET pour écrire une nouvelle « source d'événements » dans le journal des événements, vous pouvez recevoir le message d'erreur suivant : System.Security.SecurityException : l'accès au registre demandé n'est pas autorisé.
Raison pour laquelle
le processus ASP.NET. est en cours d'exécution. L'utilisateur par défaut est ASPNET (NetworkService sous IIS6.0) et cet utilisateur n'est pas autorisé à créer une « source d'événements ».
Note surla solution
: (Microsoft ne dira pas grand chose si vous voulez vous faire peur, par exemple modifier le registre entraînera un crash du système). Si vous devez résoudre ce problème, vous devez créer une « source d'événements » par un utilisateur disposant de droits d'administrateur avant d'exécuter ce programme Asp.net. Il existe plusieurs méthodes pour créer des « sources d'événements ».
La première méthode
utilise les étapes suivantes pour créer une « Source d'événement » sous « Journal d'application » dans l'éditeur de registre
1. Cliquez sur "Démarrer" puis "Exécuter".
2. Entrez "regedit" dans la case "Ouvrir".
3. Recherchez la sous-clé suivante :
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication
4. Faites un clic droit sur « Application », cliquez sur « Nouveau » puis cliquez sur « Élément »
5. Renommez ce nouvel élément en "Test"
6. Fermer l'éditeur de registre
La deuxième méthode
possède une classe EventLogInstaller dans l’espace de noms System.Diagnostics. Il crée et configure des journaux d'événements que votre application lit et écrit au moment de l'exécution. Grâce aux étapes suivantes, nous pouvons utiliser la classe EventLogInstaller pour créer une « source de l'industrie de l'événement »
1. Utilisez VB.NET ou C# pour créer une « bibliothèque de classes » appelée EventLogSourceInstaller.
2. Ajoutez une référence à System.Configuration.Install.dll, dans le projet.
3. Renommez le Class.VbClass.cs généré automatiquement en MyEventLogInstaller.vbMyEventLogInstaller.cs.
4. Remplacez le contenu de MyEventLogInstaller.vb ou MyEventLogInstaller.cs par le code suivant :
Exemple Visual Basic .NET
ImportsSystem.Diagnostics
Importe System.Configuration.Install
Importe System.ComponentModel
<RunInstaller(True)> _
Classe publique MyEventLogInstaller
Hérite du programme d'installation
MyEventLogInstaller privé en tant qu'EventLogInstaller
Public Sub New()
' Créez une instance de 'EventLogInstaller'.
myEventLogInstaller = Nouveau EventLogInstaller()
' Définissez la 'Source' du journal des événements..computerDownloadFilesarticle27, à créer.
monEventLogInstaller.Source = "TEST"
' Définissez le "Journal" dans lequel la source est créée.
monEventLogInstaller.Log = "Application"
' Ajoutez myEventLogInstaller à 'InstallerCollection'.
Installers.Add (myEventLogInstaller)
Fin du sous-marin
de fin de classe
Visual C# .NET
utiliser le système ;
en utilisant System.Diagnostics ;
en utilisant System.ComponentModel ;
en utilisant System.Configuration.Install ;
espace de noms EventLogSourceInstaller
{
[Exécuter l'installateur (vrai)]
classe publique MyEventLogInstaller : installateur
{
privé EventLogInstaller monEventLogInstaller ;
public MyEventLogInstaller()
{
//Créer une instance d'EventLogInstaller
myEventLogInstaller = new EventLogInstaller();
// Définit la source du journal des événements..computerDownloadFilesarticle27, à créer.
myEventLogInstaller.Source = "TEST" ;
// Définit le journal dans lequel la source est créée
myEventLogInstaller.Log = "Application";
// Ajoutez myEventLogInstaller à la collection d'installateurs.
Installers.Add(myEventLogInstaller);
}
}
}
5. Créez ce projet et récupérez EventLogSourceInstaller.dll.
6. Ouvrez l'invite de commande Visual Studio .NET et accédez au répertoire où se trouve EventLogSourceInstaller.dll.
7. Exécutez cette commande pour créer la « source d'événement » : InstallUtil EventLogSourceInstaller.dll
Informations plus détaillées
Nous reproduisons l'erreur ci-dessus et résolvons ce problème en créant une application Web.
1. Utilisez VB.Net ou C# pour créer une application Web Asp.net.
2. Remplacez le code dans WebForm1.aspx par le code suivant :
Exemple Visual Basic .NET
<%@ Langue de la page="vb" AutoEventWireup="true" %>
<%@ Importer l'espace de noms="System.Diagnostics" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<langage de script="VB" runat="serveur">
Sub WriteEvent_Click (Src en tant qu'objet..computerDownloadFilesarticle27, et en tant qu'EventArgs)
Dim ev comme nouveau journal d'événements ("Application")
'Nom de la source de l'événement
ev.Source = "TEST"
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Application")
Essayez
ev.WriteEntry(TextBox1.Text)
Attraper b comme exception
Response.write ("WriteEntry " & b.message & "<br>")
Fin Essayer
ev=Rien
Fin du sous-marin
</script>
<corps>
<form id="Form1" runat="serveur">
Message d'événement :
<asp:textbox id="TextBox1" runat="server" width="233px"></asp:textbox>
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Ecrire dans le journal des événements"></asp:button>
</formulaire>
</corps>
</HTML>
Exemple Visual C# .NET
<%@ Langue de la page="c#" AutoEventWireup="true" %>
<%@ Importer l'espace de noms="System.Diagnostics" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<langage de script="C#" runat="serveur">
void WriteEvent_Click (Object Src..computerDownloadFilesarticle27, EventArgs e)
{
EventLog ev = new EventLog("Application");
//Nom de la source de l'événement
ev.Source = "TEST";
EventLog.CreateEventSource (ev.Source..computerDownloadFilesarticle27, "Application")
;
{
ev.WriteEntry(TextBox1.Text);
}
attraper (exception b)
{
Response.Write("WriteEntry " + b.Message + "<br>");
}
ev = nul ;
}
</script>
<corps>
<form id="Form1" runat="serveur">
Message d'événement :
<asp:textbox id="TextBox1" runat="server" width="233px"></asp:textbox>
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Ecrire dans le journal des événements"></asp:button>
</formulaire>
</corps>
</HTML>
3. Appuyez sur F5 pour démarrer ce projet.
4. Entrez quelques caractères dans la zone de texte et cliquez sur Écrire dans le journal des événements.
5. Le message d'erreur mentionné dans la section « Symptômes » ci-dessus apparaît.
6. Pour résoudre ce problème, commentez la ligne de code suivante dans Webform1.aspx
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Application")
; Redémarrez ce projet.
http://www.cnblogs.com/niit007/archive/2006/08/13/475510.html