0

我正在开发一个 Windows .NET 应用程序,我想写入事件日志。

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 中的用户需要管理员权限才能写入事件日志。当我以“运行广告管理员”模式执行应用程序时,同样成功。

那么有什么方法可以为 vb.net 中的代码段授予管理员权限(模拟除外)?

4

2 回答 2

3

您只需要管理员权限来创建事件源而不是写入它。

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

eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO mysource /D "created mysource"
于 2012-07-06T06:21:10.717 回答
0

您可以将 app.manifest 更改requestedExecutionLevelrequireAdministrator- 这将在应用程序运行时强制出现 UAC 提示,并且该应用程序只有在可以以管理员身份运行时才会运行。(要改变这个去Project Properties>Application tab>View Windows Settings

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

如果您有时只需要管理员权限,那么您可以在需要写入事件日志时以更高的权限重新启动应用程序。查看这篇关于在 .NET 应用程序中使用 UAC 的信息性文章,了解更多信息。

于 2012-07-06T08:00:23.480 回答