如何解决Windows服务中的安全问题?

时间:2014-05-29 14:46:23

标签: vb.net visual-studio-2012 windows-services

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"的安全问题。它说"找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性。"

怎么做??

1 个答案:

答案 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语句。