Sysyem.Diagnostics.EventLog.WriteEntry("MyApplication", "Something happened");
Однако в большинстве случаев эта строка вылетит с ошибкой
"Requested registry access is not allowed"
Происходит это потому, что ASPNET код обычно исполняется из под учетной записи с ограниченными правами (ASPNET на IIS 5.0 и Network Service на IIS 6.0), а при вызове EventLog.WriteEntry происходит обращение к реестру. В реестре перечислены все источники (csource) для Event Log (в нашем случае это строка "MyApplication"). У класса EventLog существует специальный метод для создания источника EventLog.CreateEventSourc. Однако в нашем случае он не поможет. Прав нет.
Соответствующий ключ реестра можно прописать ручками:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MyApplication
Программно, источники Event Log-а создаются при помощи специального класса инсталлятора System.Diagnostics.EventLogInstaller. Для этого надо создать отдельную сборку поместить в нее код инсталлера:
using System;
using System.Configuration.Install;
using System.Diagnostics;
using System.ComponentModel;
[RunInstaller(true)]
public class CustomEventLogInstaller: Installer
{
private EventLogInstaller customEventLogInstaller;
public CustomEventLogInstaller()
{
// создаем экземпляр EventLogInstaller
customEventLogInstaller = new EventLogInstaller();
// Устанавливаем свойство 'Source' (собственно ради чего весь сыр бор)
customEventLogInstaller.Source = "MyApplication";
// В какой лог писать (обычно Application)
customEventLogInstaller.Log = "Application";
// Добавляем myEventLogInstaller в коллекцию инсталлеров.
Installers.Add(customEventLogInstaller);
}
public static void Main()
{
}
}
Получившуюся сборку можно использовать двумя способами. Первый, скормить ее утилите installutil.exe
InstallUtil.exe <путь>\сборка_инсталлера.dll
Второй, эту сборку можно использовать в инсталяторе web приложения. Для этого ее надо включить в setup проект и назначить для всех четырех Custom Actions (Install, Commit, Rollback, Uninstall).
Да, и не забудьте настроить в свойствах Application Event Log - "Затирать по необходимости". Иначе очень скоро работа вашего приложения окажется парализована из-за постоянных ошибок о преполнении лога сообщений.
1 комментарий:
О, чудо! Это помогает и с WinService! Спасибо!
Отправить комментарий