PRB: При попытке приложения АSP.NET сделать запись о новом источнике событий в журнале событий появляется сообщение об ошибке «Запрошенный доступ к реестру запрещен»

Переводы статьи Переводы статьи
Код статьи: 329291 - Vizualiza?i produsele pentru care se aplic? acest articol.
Внимание! Решения, приведенные в этой статье, связаны с внесением изменений в системный реестр. Перед внесением изменений в системный реестр рекомендуется создать резервную копию системного реестра и изучить процедуру его восстановления. Дополнительные сведения об архивировании, восстановлении и изменении реестра см. в следующей статье базы знаний Майкрософт:
256986 Описание реестра Microsoft Windows
Развернуть все | Свернуть все

В этой статье

Проблема

Если для создания нового источника событий в журнале событий используется приложение ASP.NET, может появиться следующее сообщение об ошибке:
System.Security.SecurityException: Запрошенный доступ к реестру запрещен.

Причина

По умолчанию, метка пользователя для рабочего процесса ASP.NET — ASPNET (или NetworkService для приложений, работающих со службами IIS 6.0). Проблемы, описанные в разделе «Проблема», возникают из-за отсутствия у используемой учетной записи прав, необходимых для создания источника событий.

Решение

Предупреждение. Неправильное использование редактора реестра может привести к возникновению серьезных неполадок, требующих переустановки операционной системы. Корпорация Майкрософт не несет ответственности за неправильное использование редактора реестра. При изменении реестра полагайтесь на свой опыт и знания. Для устранения этой неполадки пользователь с правами администратора должен создать источник событий до запуска веб-приложения ASP.NET. Для создания источника событий используйте один из следующих способов.

Первый способ

Создайте источник событий в журнале событий Application с помощью редактора реестра. Для этого выполните следующие действия.
  1. Нажмите кнопку Пуск и выберите пункт Выполнить.
  2. В поле Открыть введите команду regedit.
  3. Найдите следующий раздел реестра:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
  4. Щелкните правой кнопкой мыши элемент Application, выберите пункт Создать, а затем – Раздел.
  5. Введите TEST в качестве имени раздела.
  6. Закройте редактор реестра.

Второй способ

Класс EventLogInstaller в пространстве имен System.Diagnostics позволяет установить и настроить журнал событий, который будет использоваться для чтения и записи приложением во время работы. Источник событий можно создать с помощью средства EventLogInstaller. Для этого выполните следующие действия.
  1. С помощью Microsoft Visual Basic .NET или Microsoft Visual C# .NET создайте новую библиотеку классов с именем EventLogSourceInstaller. По умолчанию будет создан файл Class1.vb или файл Class1.cs.
  2. В обозревателе решений щелкните правой кнопкой мыши проект EventLogSourceInstaller и выберите команду Добавить ссылку.
  3. В диалоговом окне Добавление ссылки дважды щелкните объект System.Configuration.Install.dll и нажмите кнопку .
  4. Переименуйте файл Class1.vb\Class1.cs в MyEventLogInstaller.vb\MyEventLogInstaller.cs.
  5. Замените существующий код в MyEventLogInstaller.vb или MyEventLogInstaller.cs следующим кодом:

    Пример кода на 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()
            ' Создание экземпляра класса 'EventLogInstaller'.
            myEventLogInstaller = New EventLogInstaller()
            ' Назначение источника журнала событий для создания.
            myEventLogInstaller.Source = "TEST"
            ' Назначение журнала, в котором создан источник.
            myEventLogInstaller.Log = "Application"
            ' Добавление myEventLogInstaller в коллекцию InstallerCollection.
            Installers.Add(myEventLogInstaller)
        End Sub 
    End Class 
    
    Пример кода на 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()
    		{
    			//Создание экземпляра EventLogInstaller
    			myEventLogInstaller = new EventLogInstaller();
    
    			// Назначение источника журнала событий для создания.
    			myEventLogInstaller.Source = "TEST";
    
    			// Назначение журнала, в котором создан источник
    			myEventLogInstaller.Log = "Application";
    			
    			// Добавление myEventLogInstaller в коллекцию Installers.
    			Installers.Add(myEventLogInstaller);
    		}
    	}
    }
    
    
  6. Выберите в меню Build команду Build Solution, чтобы создать файл EventLogSourceInstaller.dll.
  7. Откройте командную строку Visual Studio .NET.
  8. В командной строке перейдите в папку, где находится файл EventLogSourceInstaller.dll.
  9. Выполните следующую команду, чтобы создать источник событий EventSource:
    InstallUtil EventLogSourceInstaller.dll

Дополнительная информация

Действия для воспроизведения проблемы

  1. С помощью Visual Basic .NET или Visual C# .NET создайте новое веб-приложение ASP.NET. По умолчанию создается файл WebForm1.aspx.
  2. В HTML-представлении файла WebForm1.aspx замените существующий код на следующий:

    Пример кода на 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")
    	' Имя источника события
    	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>
    
    Пример кода на 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");
    	// Имя источника события
    	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. В меню Debug выберите команду Start, чтобы просмотреть страницу WebForm1.aspx в обозревателе.
  4. Введите любой текст в поле TextBox и нажмите кнопку Write to event log.
  5. Появится сообщение об ошибке, приведенное в разделе «Проблема» этой статьи.
  6. Для устранения неполадки создайте источник событий, как описано в разделе «Решение», и закомментируйте в файле WebForm1.aspx следующий код:
    EventLog.CreateEventSource(ev.Source, "Application")
  7. Повторите действия 3 и 4.

Ссылки

Дополнительные сведения см. на следующих веб-узлах корпорации Майкрософт:
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

Свойства

Код статьи: 329291 - Последний отзыв: 4 декабря 2007 г. - Revision: 2.6
Информация в данной статье относится к следующим продуктам.
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Internet Information Services 5.0
  • Microsoft Internet Information Services version 5.1
  • Microsoft Internet Information Services 6.0
Ключевые слова: 
kberrmsg kbwebforms kbsecurity kbprb KB329291

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com