EnableRaisingEvents выдает ошибку

332
03 июня 2017, 13:43

Здравствуйте, я хочу получать уведомления о записи новых событий в журнал "Безопасность", но возникает ошибка доступа к реестру. Ругается именно из-за log.EnableRaisingEvents = true;

using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.Diagnostics.Eventing;
using System.Threading;
namespace ConsoleApplication1
 {
    class Program
{
    static void Main(string[] args)
    {
        string logName = "Security";
        EventLogPermission eventLogPerm = new EventLogPermission(EventLogPermissionAccess.Administer, ".");
        EventLog log = new EventLog(logName, ".");
        log.EnableRaisingEvents = true;
        Console.WriteLine(log.EnableRaisingEvents);
        log.EntryWritten += new EntryWrittenEventHandler(OnEntryWritten);
    } 
    public static void OnEntryWritten(object source, EntryWrittenEventArgs e)
    {
        Console.WriteLine(e.Entry.Message);
    }
}
} 

В результате возникает следующее сообщение об ошибке:

Необработанное исключение: System.Security.SecurityException: Запрошенный доступ к реестру запрещен.
    в System.ThrowHelper.ThrowSecurityException(ExceptionResource resource)
    в Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable)
    в System.Diagnostics.EventLog.Exists(String logName, String machineName)
    в System.Diagnostics.EventLogInternal.OpenForRead(String currentMachineName)
    в System.Diagnostics.EventLogInternal.get_EntryCount()
    в System.Diagnostics.EventLogInternal.StartListening(String currentMachineName, String currentLogName)
    в System.Diagnostics.EventLogInternal.StartRaisingEvents(String currentMachineName, String currentLogName)
    в System.Diagnostics.EventLogInternal.set_EnableRaisingEvents(Boolean value)
    в System.Diagnostics.EventLog.set_EnableRaisingEvents(Boolean value)
    в ConsoleApplication1.Program.Main(String[] args) в 
     d:\ConsoleApplication1\ConsoleApplication1\Program.cs:строка 21

При запуске с правами администратора в консоль выводит true, но в журнале событий "Приложение" регистрируется ошибка:

  Имя сбойного приложения: ConsoleApplication1.exe, версия: 1.0.0.0, метка времени: 0x5930ed5c
  Имя сбойного модуля: KERNELBASE.dll, версия: 10.0.15063.296, метка времени: 0x28e9cf15
  Код исключения: 0xe0434352
  Смещение ошибки: 0x000eb802
  Идентификатор сбойного процесса: 0x370c
  Время запуска сбойного приложения: 0x01d2db5c98bdd068
  Путь сбойного приложения: 
  D:\ConsoleApplication1\ConsoleApplication1
   \bin\Debug\ConsoleApplication1.exe
  Путь сбойного модуля: C:\WINDOWS\System32\KERNELBASE.dll
  Идентификатор отчета: 9f82e369-4395-4d8f-a7f1-602d431a4870
  Полное имя сбойного пакета: 
  Код приложения, связанного со сбойным пакетом: 

а также еще одна, такая же как выводилась в консоли

Answer 1

Программу нужно запускать с правами администратора

Добавь в Properties\app.manifest

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
READ ALSO
Проблема с выводом рекорда C#

Проблема с выводом рекорда C#

Суть в том, что у меня есть игровое приложениеЕсть текстовый файл в котором хранятся рекорды

364
Как сравнить две таблицы?

Как сравнить две таблицы?

Используется C# MySql

437
Обработка событий стилуса на ListView

Обработка событий стилуса на ListView

Все события сенсорного взаимодействия порождают соответствующие события мышиТак, для Grid достаточно подписаться на MouseDown (можно как на Right button,...

249
кастомизация стиля контрола

кастомизация стиля контрола

Есть некий контрол, а именно TextBox

216