簡體   English   中英

記錄Windows服務

[英]Logging Windows Service

我有以下代碼用於記錄通過在線研究發現的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上進行任何提示的任何指導。

您的顧問是正確的,在服務中執行此操作是個壞主意。

您可以在安裝程序中創建事件源的方法如下:

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

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

更新

從鏈接:

執行服務安裝程序后,日志已“注冊”,但尚未創建。 要創建它,必須編寫一個事件。 如果服務使用受限用戶帳戶運行,則該帳戶可能沒有足夠的安全權限來寫入第一個日志,因為需要創建該日志。

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

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

確保以管理員身份運行安裝程序。

根據您的評論:

服務無法啟動。

在事件日志中查找其未啟動的原因。 可能會引發異常,例如,如果您沒有在安裝程序中編寫一個事件,或者您沒有以管理員身份運行安裝程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM