2010-10-02 100 views
1

我有以下一段代碼,在Windows Server 2003中運行良好。它在EventViewer中寫入應用程序事件日誌。相同的代碼在Windows 2008中不起作用。應用程序崩潰。請求幫助如何寫入事件日誌在Windows Server 2008中如何使用C#在Windows Server 2008中寫入事件日誌?

if (!EventLog.SourceExists("MyServiceLog")) 
{ 
    EventLog.CreateEventSource("MyServiceLog", "Application"); 
} 
//Create an EventLog instance and assign its source. 
EventLog eventLog = new EventLog(); 
eventLog.Source = "MyServiceLog"; 
//Write an informational entry to the event log. 
eventLog.WriteEntry(Header + ": " + FailureReason); 

回答

4

您必須是本地Administrators組的成員,以創建一個新的事件源。源可能存在於Server 2003上,或者您已在該操作系統上擁有所需的權限。在Server 2008上,默認情況下即使您是管理員也不會提升權限。在這種情況下,您必須右鍵單擊您的應用程序並選擇「以管理員身份運行」。

+0

+1擊敗我我的1分鐘 – 2010-10-02 12:23:59

+0

謝謝我以管理員模式運行我的應用程序。現在它工作正常。 – Defendore 2010-10-04 08:35:34

+0

那麼,如果我的控制檯應用程序旨在作爲Windows服務運行?如何在啓動時提升服務的權限? – Maltrap 2012-11-30 00:22:22

0

重新'應用程序崩潰' - 這不應該發生在託管環境中。也許在這種情況下,它與權限相關,但除非您添加邏輯來處理錯誤(即例外),否則您將永遠處於黑暗之中並重新啓動應用程序。

更改爲

try 
{ 
    /* put your event log code here */ 
} 
catch (Exception e) 
{ 
    /* new code to gracefully handle errors */ 
} 

,並期待在Exception類和字段(如e.Messagee.StrackTrace),你得到工作了什麼問題以及哪裏它發生。

+0

'except' ='catch'? – 2012-01-10 20:06:58

+0

@Kieren - 是的,謝謝 – 2012-01-12 14:36:55

2

它與Windows 2008中的新權限集有關,您的帳戶沒有創建新事件日誌源的特權訪問權限。

當您爲您的應用程序創建安裝程序時,最好是創建這些事件日誌源,因爲通常您必須運行具有特權的安裝程序。

+0

感謝您的信息。 – Defendore 2010-10-04 08:37:36