2013-03-20 92 views
4

我有以下代碼記錄我的Windows服務,我通過在線研究發現。它在我的服務類裏被完成,就像下面這樣被初始化之前一樣。登錄時爲記錄Windows服務

public GBBInvService() 
     { 
      InitializeComponent(); 
      if (!System.Diagnostics.EventLog.SourceExists("MyLogSource")) 
       System.Diagnostics.EventLog.CreateEventSource("MyLogSource", 
                     "MyDoLog"); 
      eventLog1.Source = "MyLogSource"; 
      eventLog1.Log = "MyDoLog"; 
     } 

代碼:

eventLog1.WriteEntry("GBBInvService Service Started"); 

我也不過是由我們的顧問勸告反對它。他的評論如下:

我會避免讓服務在運行時創建事件源。這要求服務以高權限運行(即,對計算機的訪問比真正需要的更多)。設置Windows事件日誌源實際上是安裝時的工作。您可以到事件日誌安裝程序添加到項目安裝程序文件(與該服務安裝程序一起),並且隨後事件源將一直存在

這個提醒的問題是,我一直沒能找到任何在項目安裝程序文件中創建日誌的示例。我也嘗試將這個日誌創建部分移動到我的項目安裝程序中,但它不會讓我從我的Web服務cs頁面調用或寫入eventlog1。他還建議使用log4net,但這對我來說是新的,並且很難掌握。對於剛剛完成我的第一個Windows服務項目的Windows服務,我仍然很陌生,對於在項目安裝程序中創建日誌,從我的服務cs頁面寫入日誌或登錄log4net的任何方向感到非常感激。

回答

6

你的顧問是正確的,在服務中這樣做是一個壞主意。

下面是您可以在安裝程序中創建事件源:

http://blogs.msdn.com/b/helloworld/archive/2008/12/11/creating-an-event-log.aspx?Redirected=true

短版:子類安裝程序,並在你的子類安裝程序的構造函數創建事件日誌源。

UPDATE

從鏈接:執行服務安裝

後,日誌是 '註冊',但尚未建立。要創建它,必須編寫一個事件。如果服務使用受限用戶帳戶運行,那麼該帳戶可能沒有足夠的安全權限來寫入第一個日誌,因爲需要創建日誌。

示例代碼不顯示正在寫入的一個事件。確保你這樣做。

在安裝服務時,用戶必須運行安裝程序以管理員身份

確保您運行安裝程序爲管理員。

從您的評論:

服務將無法啓動。

在事件日誌中尋找它未啓動的原因。也許它拋出一個例外,例如如果您沒有在安裝程序中編寫一個事件,或者您沒有以管理員身份運行安裝程序。

+0

謝謝你。如果您查看了上面提供的鏈接,則頁面底部有一位用戶的評論。我面臨同樣的問題。服務無法啓動。 – user1270384 2013-03-21 00:15:29

+0

添加了可能會導致服務未啓動的更新。 – 2013-03-21 04:38:50