如何让我的Windows服务显示在系统托盘中?

时间:2009-03-17 14:43:31

标签: visual-studio-2005 windows-services

我的PC服务在PC启动时在后台运行。我想在系统托盘上显示一个图标,以便在用户登录后进行配置,但无法找到如何执行此操作。

是否有我应该寻找的事件告诉我用户已登录?

据我所知,Windows Services无法拥有UI,所以我需要启动应用程序才能显示sys托盘图标吗?如何将配置更新传递给我的服务。

4 个答案:

答案 0 :(得分:11)

您需要一个单独的“代理”应用程序。 Windows服务是全局的,在系统级别运行。系统上可以同时运行多个桌面,因此虽然有多种方法允许服务与桌面层交互,但与“用户桌面”交互的方式与使用应用程序的方式相同并非易事。已经绑定到特定的登录/桌面环境。

将服务隧道连接到桌面环境也存在安全风险(它打开了通向系统帐户的路径,除非服务在更受限制的服务上运行),这就是为什么默认禁用与桌面交互的原因

答案 1 :(得分:5)

您需要一个单独的应用程序来显示托盘图标。您可以通过WCF让服务托管WCF服务或通过ServiceController与您的服务进行通信。

答案 2 :(得分:2)

我会创建第二个在用户登录时运行并在系统托盘中显示的应用程序。

您可以打开远程处理到Windows服务,并通过系统托盘中应用程序的公开方法传递配置更新。

答案 3 :(得分:2)

实际上,我认为您不能在系统托盘中显示服务。执行此操作的应用程序始终使用代理或其他管理工具。

大多数情况下,托盘中运行的应用程序是一个非常小的应用程序,可以访问服务的设置。

配置选项可以存储在注册表,ini文件或任何其他存储选项中。配置更改后,您需要做的就是确保重新启动服务,以便重新加载它的新设置。