В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

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

Внимание! Решения, приведенные в этой статье, связаны с внесением изменений в системный реестр. Перед внесением изменений в системный реестр рекомендуется создать резервную копию системного реестра и изучить процедуру его восстановления. Дополнительные сведения об архивировании, восстановлении и изменении реестра см. в следующей статье базы знаний Майкрософт:
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.DiagnosticsImports System.Configuration.InstallImports 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.
Свойства

Номер статьи: 329291 — последний просмотр: 12/04/2007 20:08:25 — редакция: 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
Отзывы и предложения
ild(m);