用于C#服务的MessageBox.Show()的替代方案

时间:2012-01-25 15:05:26

标签: c# .net dialog

在Windows XP中,当我们的服务因未知原因无法启动时,MessageBox.Show()是一种提示用户的可行方法。但是,对于Vista及更高版本,服务不再显示此消息,这是可以理解的,因为大多数时候使用对话框阻止服务是不可取的。 MessageBox.Show()的哪些(非阻塞,最好是)替代方案可用于服务?

6 个答案:

答案 0 :(得分:5)

Windows服务应在遇到错误时写入Windows事件日志。 最好是应用程序日志。

您需要为服务创建一个事件源,为此,您需要管理员权限,因此这应该在安装过程中完成。

答案 1 :(得分:2)

使用系统事件日志:http://support.microsoft.com/kb/307024

答案 2 :(得分:2)

您有两个基本选项:

  1. 创建在系统托盘中运行的特定于用户的启动应用程序。此应用程序将连接到服务并从服务接收消息(这类似于防病毒程序的运行方式)。

  2. 将所有消息和例外记录到事件日志中。您可以将应用程序事件日志用于关键问题,并将特定于应用程序的事件日志用于信息或诊断消息。

  3. 上述选项并不相互排斥,您应该始终实施#2。

答案 3 :(得分: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>

答案 4 :(得分:1)

记录只是告知用户服务问题的一种正确方法。 事件日志是服务的登录系统。

答案 5 :(得分:1)

通常会使用EventLog进行记录(例如,服务启动/停止,以及错误等)。

如果需要其他跟踪,请使用System.Diagnostics.Trace或Debug,然后使用DebugView之类的工具进行监控。