我正在研究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权限(模仿除外)?
答案 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。