In this KB article it explains the issue
http://support.microsoft.com/kb/329291
PRB: "Requested Registry Access Is Not Allowed" Error Message When ASP.NET Application Tries to Write New EventSource in the EventLog
Symptoms
When you use ASP.NET to create a new event source in the event log, you may receive the following error message:
System.Security.SecurityException: Requested registry access is not allowed.
Cause
By default, the user token of the ASP.NET worker process is ASPNET (or NetworkService for applications that run on Internet Information Services [IIS] 6.0). The problem in the "Symptoms" section occurs because your account does not have the correct user rights to create an event source.
Resolution
First approach:
Create an event source under the Application event log in Registry Editor (on the server, not your development PC). To do this, follow these steps:
- Access the server s Windows desktop. Click Start, and then click Run.
- In the Open text box, type regedit.
- Locate the following registry subkey:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication
- Right-click the Application subkey, point to New, and then click Key.
- Type "
TEST
" for the key name.
- Close Registry Editor.
Second (alternative) approach:
The EventLogInstaller
class in the System.Diagnostics
namespace permits you to install and configure an event log that your application reads from or writes to while running. You can create an event source by using EventLogInstaller
. To do this, follow these steps:
- Use Microsoft Visual Basic .NET or Microsoft Visual C# .NET to create a new Class Library named EventLogSourceInstaller. By default, the Class1.vb file or the Class1.cs file is created.
- In Solution Explorer, right-click
EventLogSourceInstaller
, and then click Add References.
- In the Add Reference dialog box, double-click
System.Configuration.Install.dll
, and then click OK.
- Rename the
Class1.vb
`Class1.cs` to MyEventLogInstaller.vbMyEventLogInstaller.cs.
- Replace the existing code in
MyEventLogInstaller.vb
or MyEventLogInstaller.cs
with the following sample code:
Visual Basic .NET sample
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
Visual C# .NET sample
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);
}
}
}
- On the Build menu, click Build Solution to create EventLogSourceInstaller.dll.
- Open the Visual Studio .NET Command Prompt.
- At the command prompt, change to the folder where EventLogSourceInstaller.dll is located.
- Run the following command to create the EventSource:
InstallUtil EventLogSourceInstaller.dll
If you use the second approach under the resolution you should get it to work.
If you don t want to do that or you can t get it to work correctly another way would be to use the identity tag in your web.config
and impersonate a user that does have rights to edit the registry. This is a security whole only for this application but if you implement some extra security measures you should be fine.