如何在Windows服务中显示通知区域气泡和图标?

6
我有一个Windows服务,当用户启动他们的工作站时它始终在运行。这个Windows服务很重要,当某些事情发生时,比如服务停止、启动、重新启动等,我想在通知区域显示气球通知。
例如:
enter image description here 此外,是否有一种方法可以为我的Windows服务显示一个通知区域图标?

2
这篇文章可能会有所帮助:https://dev59.com/RHE85IYBdhLWcg3wtVxT。一个服务无法直接拥有系统托盘图标。 - keyboardP
3个回答

12

Windows服务直接与桌面交互的时代已经结束,因此您需要找到另一种方法。

我所做的是创建一个普通的WinForms应用程序,其中包括一个NotifyIcon。该应用程序的行为类似于任务管理器,可以隐藏在任务栏中,只能在系统托盘中显示。如果我右键单击系统托盘图标,会出现菜单。如果我双击该图标,则会显示应用程序窗口。

为了促进WinForms应用程序与Windows服务之间的通信,我使用WCF。具体来说,我使用Juval Lowy发布-订阅框架,这对于这种情况非常有效。有关更多详细信息,请参见我的回答这里

希望这可以帮助您。


-1

如果您只想向Windows服务发送一个简单的命令,您可以通过以下方式从用户应用程序向其发送消息。

ServiceController myService = new ServiceController("YOUR Service Name");
myService.ExecuteCommand(123); // do something;

如果您在继承自 ServiceBase 的类中重写 OnCustomCommand 方法,那么您可以使用此命令来触发服务执行某些操作,例如重新加载配置文件或切换到某个状态。

3
你的回答似乎与问题不太相关。Ryan 正试图使用系统托盘图标,而不是向服务发送命令。 - Peter
我和马特想说的是,与其配置您的服务以检测用户登录并将图标添加到任务栏中,不如运行一个独立的应用程序来放置任务栏中的图标。该应用程序可以访问状态并按照上述方法向服务发送简单命令。这样,如果服务终止,图标就不会消失。如果您希望在用户登录时出现,则将应用程序的快捷方式添加到启动文件夹中。 - JonPen

-1
我们的新款(免费)ServiceTray实用工具将让您通过托盘图标控制服务。当它检测到您的服务状态发生变化(启动->停止等)时,它还会显示弹出/气球通知。

2
我建议将此纯垃圾/仅链接的帖子重写为一些真正解释应该如何实现这样的功能的答案...或者就删除它。 - Alexei Levenkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接