.net dotnet中windows服务的用户界面

.net dotnet中windows服务的用户界面,.net,windows-services,.net,Windows Services,我在点网络上创建了一个windows服务,可以自动向我的朋友发送电子邮件。一切进展顺利。现在我有一个要求,比如显示一个弹出窗口,上面写着邮件已经发送或者类似的东西。但我需要一些想法来实现这个逻辑。我认为不可能为windows服务提供UI。因此,我考虑创建另一个windows应用程序来显示弹出消息,并在邮件发送后从windows服务调用此应用程序。这只是一个想法,不确定这种方法是否正确。请引导我 谢谢。我认为最简单的方法是创建另一个Windows应用程序,它只需坐在托盘中等待来自Windows服务

我在点网络上创建了一个windows服务,可以自动向我的朋友发送电子邮件。一切进展顺利。现在我有一个要求,比如显示一个弹出窗口,上面写着邮件已经发送或者类似的东西。但我需要一些想法来实现这个逻辑。我认为不可能为windows服务提供UI。因此,我考虑创建另一个windows应用程序来显示弹出消息,并在邮件发送后从windows服务调用此应用程序。这只是一个想法,不确定这种方法是否正确。请引导我


谢谢。

我认为最简单的方法是创建另一个Windows应用程序,它只需坐在托盘中等待来自Windows服务的通知。对于通信,您可以使用WCF。我有类似的解决方案,效果非常好

请参见此进程间通信示例:

我认为不可能为windows服务提供UI

这部分是:

Microsoft Windows服务[…]不显示任何用户界面

见@Arun的答案

因此,您需要一个具有GUI的流程,该GUI可以与用户进行交互。要让这两个应用程序(服务和GUI)通信,您必须查看(IPC)


有关在C#中可用的IPC机制的概述,请参阅,但通常建议使用WCF。

没有限制windows服务不应具有任何GUI。Windows服务可以有GUI。但如果有,它将显示在服务0中。在Vista之前的Windows早期版本中,这是可能的。让我们详细讨论一下。
每当用户登录到Windows时,就会创建登录会话。每个会话都有一个会话ID。所有windows服务都将在会话0中运行。
在会话0中,用户可以查看运行在该会话中的任何程序的图形元素并与之交互,包括Windows NT、2000、XP和Server 2003等早期版本中由Windows服务创建的图形元素。
后来由于安全问题,Microsoft隔离了会话0。其影响是服务无法显示其GUI。这是一种情况。
考虑到,服务试图在会话0中创建一个用户界面(UI),例如对话框,因为在服务0的隔离下,用户没有在会话0中运行,他或她从未看到UI,因此无法提供服务所需的输入。该服务似乎停止运行,因为它正在等待未出现的用户响应。
由于这种隔离,服务无法通过Windows消息和应用程序通信,反之亦然。我们使用RPC、交互式服务检测服务(ISDS)和IPC进行服务和应用程序之间的通信

有关此主题的讨论,请参见Windows服务常见问题解答中的


从技术上讲,这门是开着的(即使在现代版本的windows上也是如此),但您最好设计一个“无头”服务应用程序,并依赖另一个GUI组件与用户交互,正如其他人所建议的那样。

可以显示弹出框。您可以通过添加命名空间将GUI添加到windows服务
System.Windows.Forms
。在此之前,右键单击解决方案资源管理器中的“引用”选项卡并添加此命名空间

现在,您可以在此应用程序中使用任何gui控件。 例如:

MessageBox.Show("mailed succesfuly");

很抱歉投了反对票,但你的答案不正确。Windows Vista和使用后会话0隔离-有效地在死区显示服务的任何UI,这可能导致服务变得无响应。请参阅以了解更多信息,