2011-06-01 86 views
6

我有一个Windows服务,当用户启动他们的工作站时总是运行。此Windows服务是至关重要的,我想显示在通知区域气球通知当某些事情发生,如该服务停止,启动,重新启动等如何显示来自Windows服务的通知区域气球和图标?

例如:
enter image description here

而且,有没有办法为我的Windows服务显示通知区域图标?

+2

这篇文章可能有帮助:http://stackoverflow.com/questions/2652254/how-can-i-display-a-system-tray-icon-for-c-window-service服务不能直接拥有一个SysTray图标。 – keyboardP 2011-06-01 16:49:02

回答

11

Windows服务直接与桌面交互的时代已经结束,所以你必须找到另一种方式。

我所做的是创建一个包含NotifyIcon的普通WinForms应用程序。此应用程序的行为模仿任务管理器的行为,以便它可以从任务栏隐藏,并且只能在系统托盘中可见。如果我右键单击系统托盘图标,我会看到一个菜单。如果我双击该图标,则会显示应用程序窗口。

为了便于WinForms应用程序和Windows服务之间的通信,我使用WCF。具体来说,我使用Juval LowyPublish-Subscribe Framework,这对于这种场景非常有效。有关更多详细信息,请参阅我的回答here

希望这会有所帮助。

-1

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

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

如果在类中覆盖extends ServiceBase中的OnCustomCommand方法。 然后,您可以使用此命令触发服务执行某些操作,例如重新加载配置文件或切换到某种状态。

+2

你的答案并不真正与问题相关。 Ryan正在尝试使用系统托盘图标,而不是将命令发送到服务。 – Peter 2011-07-18 19:00:13

+0

我和Matt都在说的是,不要配置服务来检测用户登录并在他们的任务栏中添加一个图标。有一个单独运行的应用程序,可以在任务栏中放置一个图标。此应用程序可以访问状态并将简单命令发送到上面的方法显示中的服务。这样,如果服务终止,图标不会消失。如果您希望它在用户登录时位于那里,请将快捷方式添加到启动文件夹中。 – JonPen 2011-08-02 11:20:32

0

我们的新(免费)ServiceTray utility将允许您从托盘图标控制您的服务。当它检测到您的服务已更改状态(开始 - >停止等)时,它还会显示弹出/气球通知。

相关问题