Public Sub New()
MyBase.New()
InitializeComponent()
System.Diagnostics.Process.Start("C:\\Users\\himanshu vaishnav\\Desktop\\DataSync(till download)\\DataSync\\bin\\Debug\\DataSync")
If Not System.Diagnostics.EventLog.SourceExists("MySource") Then
System.Diagnostics.EventLog.CreateEventSource("MySource", "MyNewLog")
End If
EventLog1.Source = "MySource"
EventLog1.Log = "MyNewLog"
End Sub
如果条件我正在收到" MySource"的安全问题。它说"找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性。"
怎么做??
答案 0 :(得分:0)
Private Const _logName As String = "Application" ' this refers to the application event log
Private Const _appName As String = "myApp"
Friend Sub addEvent(ByVal _eventID As Integer, ByVal _strMessage As String)
Try
Try : EventLog.CreateEventSource(_appName, _logName) : Catch ex As Exception : End Try
Using EL As New EventLog
EL.Source = _appName
EL.WriteEntry(_strMessage, EventLogEntryType.Information, _eventID)
End Using
Catch ex As Exception
' ... ignore (probably do something else instead)
End Try
End Sub
我想作为一个注释:标准用户无法创建新的事件源,也无法读取安全日志,因此:
.SourceExists(_appName)
将始终以标准用户身份抛出异常。
.CreateEventSource()
将返回异常。
为了首次创建事件日志.Source
,您必须正在升级。
你可以测试My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator)
,问题是,除非你测试它们,否则它们不会捕获所有其他例外,或者完全排除它们,包括:不匹配/无效/太长 - 日志/应用程序名称,安全权限,自定义用户权限等...您不能总是保证在项目上工作的其他人将意识到所有这些限制。需要很多检查。关于这方面的更多信息:
EventLog Class (MSDN) - 解释了大部分安全性问题。
EventLog.CreateEventSource Method (MSDN) - 解释了可能出现的大多数例外情况。
编辑:如果您计划在日志中写入大量事件,则应重构代码以声明EL
类/对象的成员变量,并在应用程序终止时正确.Close()
它,而不是使用Using
语句。