我的应用程序使用事件日志记录异常和信息性消息,但是当以具有有限访问权限的标准用户身份登录时,我收到异常:
找不到源,但部分或全部事件日志不可能 搜索。无法访问的日志:安全性
据我所知,在我写入的日志(应用程序)中找不到事件源,并且应用程序正在尝试创建事件源,但在注册之前,需要检查所有日志以确保事件源尚未使用。
我的问题是我应该如何创建可供标准用户使用的事件源?该应用程序将在公司网络上运行,我们将所有用户锁定到最不需要的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
然后我在我的解决方案中添加了一个安装项目,该项目具有类项目的主要输出,安装程序安装但是当再次运行我的应用程序时,它失败并显示相同的错误消息。
答案 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>