为标准用户创建EventLog事件源

时间:2011-09-14 22:59:03

标签: .net wpf vb.net security event-log

我的应用程序使用事件日志记录异常和信息性消息,但是当以具有有限访问权限的标准用户身份登录时,我收到异常:

  

找不到源,但部分或全部事件日志不可能   搜索。无法访问的日志:安全性

据我所知,在我写入的日志(应用程序)中找不到事件源,并且应用程序正在尝试创建事件源,但在注册之前,需要检查所有日志以确保事件源尚未使用。

我的问题是我应该如何创建可供标准用户使用的事件源?该应用程序将在公司网络上运行,我们将所有用户锁定到最不需要的privellages。

我试图通过创建一个新的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 :(得分:0)

根据用户“登录”的方式,“应用程序”日志的使用是不可能的......你一定要尝试创建自己的日志(不仅仅是LogSource!),看看是否有效...... < / p>

恕我直言,解决此问题的最佳方法是让管理员通过组策略为您创建EventSource - 这将确保正确的权限等。

答案 1 :(得分:0)

我实际上在我的主exe项目中添加了一个特殊的'类型'System.Configuration.Install.Installer类,它似乎在应用程序安装期间由.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

对于它的价值,上面的代码与app.config中的EventLog片段一起使用

    <sharedListeners>
      <add name="EventLog" initializeData="MyCompany Cool App" type="System.Diagnostics.EventLogTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </sharedListeners>