C# .Net Windows服务向用户报告错误的最佳方式

C# .Net Windows服务向用户报告错误的最佳方式,c#,windows-services,exception-handling,error-reporting,C#,Windows Services,Exception Handling,Error Reporting,我正在编写一个windows服务,它将进行大量的网络通信,我需要一种方法来通知用户(如果已登录)任何异常/错误。我知道允许服务与桌面交互是一种不好的做法,那么是否有其他方法通知用户发生了错误?我知道事件日志记录,但我也希望能够显示来自系统托盘的通知气泡或引起用户注意的东西。使用其他应用程序与此应用程序交互并通知用户错误如何?这样,您就可以向用户提供“选项”。可能是关闭警报、电子邮件等通常,您将拥有一个辅助应用程序,该服务可以通知您。例如,您可以有一个系统托盘图标(ugh),当发生重要事件时,它会

我正在编写一个windows服务,它将进行大量的网络通信,我需要一种方法来通知用户(如果已登录)任何异常/错误。我知道允许服务与桌面交互是一种不好的做法,那么是否有其他方法通知用户发生了错误?我知道事件日志记录,但我也希望能够显示来自系统托盘的通知气泡或引起用户注意的东西。

使用其他应用程序与此应用程序交互并通知用户错误如何?这样,您就可以向用户提供“选项”。可能是关闭警报、电子邮件等

通常,您将拥有一个辅助应用程序,该服务可以通知您。例如,您可以有一个系统托盘图标(ugh),当发生重要事件时,它会弹出引出序号(双ugh)。应用程序本身也可以为您的服务设置一个接口。

请考虑使用事件日志和单独的应用程序进行监视。您也可以考虑使用电子邮件或MSMQ。

< P>您可以使用一些现有的通知应用程序,比如SnLL:。这将允许用户“选择加入”

您必须提供“与桌面交互”选项的替代选项。Vista和Win7不再支持它。允许受限用户访问在高度特权帐户上运行的UI被认为是一个太大的安全风险。Google“session 0 isolation”以查找有关此的详细信息

您需要使用.NET支持的进程互操作机制之一来设置服务与UI应用程序之间的交互。对于简单的消息传递,请使用套接字或命名管道。管道名称需要有“Global\”前缀才能对所有会话可见。对于更复杂的交互,可以使用远程处理或WCF


确保处理用户决定不运行或关闭桌面应用程序的可能性。您应该使用EventLog类记录任何错误。

为了解决这个问题,我创建了一个Windows窗体应用程序,用户可以随意启动和停止。当然,Windows服务是全天候在后台运行的。当应用程序启动时,它使用Windows通信基础(WCF)来查询该服务的当前状态——它是活动的、连接了多少客户端、已经收集了多少字节等。然后将该信息呈现给应用程序内的用户。 我试图模仿任务管理器的行为,因此我还向在系统托盘中显示图标的应用程序的主窗体添加了一个
System.Windows.Forms.NotifyIcon
。当应用程序打开时,将显示系统托盘图标。用户可以将应用程序最小化到任务栏,也可以完全隐藏应用程序。只有当用户关闭应用程序时,托盘图标才会消失。托盘图标还支持双击以重新打开应用程序,并支持弹出菜单以快速访问功能

无论如何,我想指出的是,WCF是让您的服务和前端应用程序进行通信的最直接的方式。人们会争论与WCF相关的所谓“陡峭”学习曲线,但我没有经历过。我发现WCF是开发进程间通信的一种非常有效的方法。您可以通过观看来了解WCF编程范式