我正在使用dot net创建一个Windows服务,以向我的朋友发送自动电子邮件。一切都运作良好。现在我有一个要求,需要显示一个弹出窗口,提示邮件已发送或类似内容。但我需要一些想法来实现这个逻辑。我认为Windows服务不可能拥有用户界面。因此,我考虑创建另一个Windows应用程序来显示弹出消息,并在邮件发送时从Windows服务调用此应用程序。这只是一个想法,不确定是否正确。请指导我。
谢谢。
谢谢。
这部分是正确的(参见@Arun的答案):
Microsoft Windows服务[...]不显示任何用户界面。
因此,您需要一个具有GUI的进程来与用户进行交互。要让这两个应用程序(服务和GUI)进行通信,您需要研究进程间通信(IPC)。
请参见此问题,了解可在C#中使用的IPC机制概述,但通常建议使用WCF。
我认为最简单的方法是创建另一个 Windows 应用程序,它将保持在系统托盘中,并等待来自 Windows 服务的通知。您可以使用 WCF 进行通信。我有类似的解决方案,它运行得非常好。
请参阅此进程间通信示例:
http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication
请参阅Windows服务FAQ中的"Windows服务是否可以有GUI界面",以了解此主题的讨论。
从技术上讲,WTSSendMessage函数在现代版本的Windows上仍然存在(即使是最新的版本),但是像其他人建议的那样,您最好设计一个“无头”服务应用程序,并依赖于另一个GUI组件与用户进行交互。
可以显示弹出框。您可以通过添加命名空间System.Windows.Forms
将GUI添加到Windows服务中。在此之前,请右键单击解决方案资源管理器中的引用选项卡并添加此命名空间。
现在,您可以在其中使用任何GUI控件。 例如:
MessageBox.Show("mailed succesfuly");