C#服务的MessageBox.Show()的替代方案
在Windows XP中,MessageBox.Show()是一种可行的方法,可以在我们的服务因未知原因无法启动时提示用户。但是,在Vista和更高版本中,服务不再显示此消息,这是可以理解的,因为大多数情况下使用对话框阻止服务是不可取的。对于服务,MessageBox.Show()有哪些(最好是非阻塞的)替代方案可用?使用系统事件日志:Windows服务遇到错误时应写入Windows事件日志。 最好是应用程序日志 您需要为服务创建一个事件源,要做到这一点,您需要管理员权限,因此这应该在安装过程中完成。声明:C#服务的MessageBox.Show()的替代方案,c#,.net,dialog,C#,.net,Dialog,在Windows XP中,MessageBox.Show()是一种可行的方法,可以在我们的服务因未知原因无法启动时提示用户。但是,在Vista和更高版本中,服务不再显示此消息,这是可以理解的,因为大多数情况下使用对话框阻止服务是不可取的。对于服务,MessageBox.Show()有哪些(最好是非阻塞的)替代方案可用?使用系统事件日志:Windows服务遇到错误时应写入Windows事件日志。 最好是应用程序日志 您需要为服务创建一个事件源,要做到这一点,您需要管理员权限,因此这应该在安装过程中
private static TraceSource _traceSource = new TraceSource("YourSourceName");
用法,请参阅:
配置:
<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>
日志记录是告知用户服务问题的唯一正确方法。
事件日志是系统登录服务的首选日志。通常使用事件日志来记录(例如,服务启动/停止和错误等)
如果需要其他跟踪,请使用System.Diagnostics.Trace或Debug,然后使用DebugView之类的工具进行监视。您有两个基本选项:
上述选项并非相互排斥,您应该始终实现#2。写入事件日志如何?您试图解决的问题是什么?是否要从服务中提示交互式用户?您确定服务是问题域的最佳模型吗?我们已经写入事件日志和%APPDATA%中的日志文件。我想用一种直观的方式让用户知道出了什么问题。@BasedAsFunk:那么你需要使用后台进程(一个隐藏表单的应用程序),而不是windows服务。
<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>