将用户提升到管理员级别以写入.NET中的Eventlog

时间:2012-07-06 05:34:15

标签: .net vb.net windows-7 event-log securityexception

我正在研究Windows .NET应用程序,我想写入Eventlog。

Public Shared Sub WriteExceptionToEventLog(ByVal message As String)
        Dim cs As String = "TESTLOG"
        Dim elog As New EventLog()
        Dim sourceExist As Boolean

        Try
            sourceExist = EventLog.SourceExists(cs)
        Catch ex As Exception
            sourceExist = False
        End Try

        If Not sourceExist Then
            Dim ev As New EventLogPermission(EventLogPermissionAccess.Administer, ".")
            ev.PermitOnly()
            EventLog.CreateEventSource(cs, "TESTLOG")
        End If
        elog.Source = cs
        elog.EnableRaisingEvents = True
        EventLog.WriteEntry(cs, message, EventLogEntryType.[Error])

    End Sub

但这不起作用,因为Windows 7中的用户需要Admin previlage才能写入Eventlog。当我使用“运行广告管理”模式执行应用程序时,同样成功。

那么有没有办法为vb.net中的代码段赋予Admin权限(模仿除外)?

2 个答案:

答案 0 :(得分:3)

您只需要管理员权限即可创建不写入事件源的事件源。

在安装时或在提升的命令提示符下手动创建源。

eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO mysource /D "created mysource"

答案 1 :(得分:0)

您可以将app.manifest requestedExecutionLevel更改为requireAdministrator - 这将在应用程序运行时强制执行UAC提示,并且仅当应用程序可以作为管理员运行时才会运行。 (要更改此内容,请转到Project Properties>Application tab>View Windows Settings

如果您的应用程序经常需要管理员权限,那么这是唯一的方法。

如果您有时只需要管理员权限,则可以在需要写入事件日志时以更高权限重新启动应用程序。有关在.NET应用程序中使用UAC的更多信息,请查看this informative article