Создать источник событий EventLog для обычных пользователей - PullRequest
2 голосов
/ 15 сентября 2011

В моем приложении используется журнал событий для регистрации исключений и информационных сообщений, однако при входе в систему в качестве обычного пользователя с ограниченным доступом я получаю исключение:

Источник не былнайдено, но не удалось найти некоторые или все журналы событий.Недоступные журналы: безопасность

Я понимаю, что источник событий не может быть найден в журнале, в который я записываю (приложение), и приложение пытается создать источник событий, но перед тем, как его можно зарегистрировать, все журналынеобходимо проверить, чтобы убедиться, что источник события еще не используется.

Мой вопрос: как мне создать источник события, который может быть использован обычными пользователями?Приложение будет работать в корпоративной сети, в результате чего мы будем блокировать всех пользователей с наименьшими требуемыми привилегиями.

Я попытался решить эту проблему, создав новый проект файла класса VS2008, который будет запущен как пользователь-администратор, которыйзарегистрирует EventSource, однако это не решило ошибку.Ниже приведен мой класс.

Imports System.Diagnostics
Imports System.Configuration.Install
Imports System.ComponentModel

<RunInstaller(True)> _
Public Class InstallEventLog
    Inherits Installer
    Private myEventLogInstaller As EventLogInstaller
    Public Const EventSource As String = "My Application Here"

    Public Sub New()
        myEventLogInstaller = New EventLogInstaller
        myEventLogInstaller.Source = EventSource
        myEventLogInstaller.Log = "Application"
        Installers.Add(myEventLogInstaller)
    End Sub
End Class

Затем я добавил в свое решение проект установки, который имеет основной вывод проекта класса, установка устанавливает, однако при повторном запуске приложения происходит сбой с тем же сообщением об ошибке.выше.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2014

Я фактически добавил специальный 'тип' класса System.Configuration.Install.Installer в мой основной exe-проект , который, кажется, успешно выполняется MSI во время установки приложения (см. Оформление .., что это важно). Теперь, обратите внимание, даже если этот специальный класс установщика успешно регистрирует источник журнала событий автоматически, если конечный пользователь дважды щелкает MSI для выполнения установки - в какой-то момент во время установки - экран становится темным и появляется подсказка для учетных данных администратора отображается .. так, повышенные разрешения требуются независимо.

Вот мой класс, который, опять же, является просто другим классом, сидящим в моем проекте Windows Forms .exe:

Imports System.ComponentModel
Imports System.Configuration.Install

<RunInstaller(True)>     
Public Class CoolAppEventLogInstaller
  Inherits System.Configuration.Install.Installer

  Private myEventLogInstaller As EventLogInstaller

  Public Sub New()
    'This call is required by the Component Designer.
    InitializeComponent()

    'Add initialization code after the call to InitializeComponent

    ' Create an instance of an EventLogInstaller.
    myEventLogInstaller = New EventLogInstaller()

    ' Set the source name of the event log.
    myEventLogInstaller.Source = "MyCompany Cool App"


    ' Add myEventLogInstaller to the Installer collection.
    Installers.Add(myEventLogInstaller)
  End Sub 'New

    Public Shared Sub Main()
    End Sub 'Main


End Class

Что бы это ни стоило, приведенный выше код работает вместе с фрагментом EventLog в моем app.config

    <sharedListeners>
      <add name="EventLog" initializeData="MyCompany Cool App" type="System.Diagnostics.EventLogTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </sharedListeners>
0 голосов
/ 19 сентября 2011

В зависимости от того, насколько «зарегестрированы» ваши пользователи, использование «Журнала приложений» не представляется возможным ... вам определенно следует попробовать создать свой собственный Журнал (не только LogSource!) И посмотреть, работает ли он ...

ИМХО, лучший способ решить эту проблему - попросить администраторов создать для вас EventSource с помощью групповой политики - это обеспечит правильные права и т. Д.

...