2012-07-06 42 views
0

我正在研究Windows .NET應用程序,並且想寫入Eventlog。將用戶提升到管理員級別,以寫入到.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預先寫入Eventlog。當我使用「運行廣告管理」模式執行應用程序時,也是如此。

那麼有什麼辦法給vb.net代碼段的管理員權限(模擬除外)?

+0

你是在一個普通的應用程序或服務中運行? – 2012-07-06 05:53:53

+0

它是一個普通的Windows應用程序..不是服務 – smashstar 2012-07-06 06:44:33

回答

3

你只需要管理員權限來創建事件源不寫入它。

安裝時或在提升的命令提示符下手動創建源。

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

感謝adrianm,但我有一個解決方案中的幾個小應用程序,並且想要使用代碼 – smashstar 2012-07-06 06:47:03

+0

動態創建Eventsource然後,您需要運行具有管理權限的應用程序或更改安全政策。爲什麼不讓所有的應用程序使用相同的來源? – adrianm 2012-07-06 07:00:34

0

您可以更改app.manifest requestedExecutionLevelrequireAdministrator - 這將迫使UAC提示,當運行應用程序和應用程序將只運行,如果它可以作爲管理員身份運行。 (要更改此選項,請轉至Project Properties>Application tab>View Windows Settings

如果您的應用程序經常需要管理員權限,那麼這是真正的唯一方法。

如果您只有時需要管理員權限,那麼您可以在需要寫入事件日誌時使用更高權限重新啓動應用程序。有關在此應用程序中使用UAC的更多信息,請參閱this informative article

相關問題