2012-01-25 44 views
0

在Windows XP中,當我們的服務因未知原因未能啓動時,MessageBox.Show()是提示用戶的可行方法。但是,在Vista和更高版本中,服務不再顯示此消息,這是可以理解的,因爲大多數情況下,使用對話框阻止服務是不可取的。什麼(非阻塞,最好)MessageBox.Show()的替代品可用於服務?用於C#服務的MessageBox.Show()的替代方法

+2

如何寫入EventLog? –

+2

你正試圖解決什麼問題?您是否打算通過服務提示交互式用戶?您確定服務是問題域的最佳模式嗎? – catfood

+0

我們已經寫入了事件日誌和位於%APPDATA%內的日誌文件。我要求一種讓用戶知道出現問題的可視方式。 –

回答

2

你有兩個基本的選擇:

  1. 創建在系統托盤中運行用戶特定的啓動應用程序。此應用程序將連接到服務並從服務接收消息(這與防病毒程序的運行方式類似)。

  2. 將所有消息和例外寫入事件日誌。您可以將應用程序事件日誌用於關鍵問題以及特定於應用程序的事件日誌,以獲取信息或診斷消息。

上述選項並不相互排斥,您應該始終執行#2。

5

的Windows服務應寫入Windows事件時,他們遇到的錯誤日誌。 最好是應用程序日誌。

您需要爲服務創建一個事件源,並且爲此需要管理員權限,因此應在安裝期間完成。

1

聲明:

private static TraceSource _traceSource = new TraceSource("YourSourceName"); 

用法,看MSDN

_traceSource.TraceEvent(...); 

配置:

<system.diagnostics> 
     <sources> 
      <source name="YourSourceName" switchValue="All" switchType="System.Diagnostics.SourceSwitch"> 
       <listeners> 
        <add name="eventLog" /> 
       </listeners> 
     </source> 
    <trace autoflush="true"> 
     <listeners> 
      <add name="eventLog" /> 
     </listeners> 
    </trace> 
    <sharedListeners> 
     <add name="eventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="SourceName" /> 
    </sharedListeners> 
</system.diagnostics> 
1

記錄只有一個告知用戶關於服務問題的正確途徑。 事件日誌將服務優先登錄系統。

1

通常會使用EventLog進行記錄(例如,服務啓動/停止和錯誤等)。

如果您需要額外的跟蹤,請使用System.Diagnostics.Trace或Debug,然後使用類似DebugView的工具進行監視。