如何为C#窗口服务显示系统托盘图标。

时间:2010-04-16 10:44:17

标签: c# windows

如何为C#窗口服务显示系统托盘图标。?

2 个答案:

答案 0 :(得分:35)

服务在与登录用户不同的窗口工作站中运行,因此您无法拥有系统托盘图标。来自https://docs.microsoft.com/en-us/dotnet/framework/windows-services/introduction-to-windows-service-applications

  

Windows服务应用程序在与登录用户的交互式工作站不同的窗口工作站中运行。窗口站是一个安全对象,包含剪贴板,一组全局原子和一组桌面对象。由于Windows服务的工作站不是交互式工作站,因此将无法看到从Windows服务应用程序中引发的对话框,这可能会导致程序停止响应。同样,错误消息应记录在Windows事件日志中,而不是在用户界面中引发。

     

.NET Framework支持的Windows服务类不支持与交互式工作站(即登录用户)的交互。 .NET Framework也不包含表示站点和桌面的类。如果您的Windows服务必须与其他工作站交互,则需要访问非托管Windows API。有关详细信息,请参阅Windows SDK文档。

     

必须仔细设计Windows服务与用户或其他工作站的交互,以包括诸如没有登录用户或具有意外的桌面对象集的用户之类的场景。在某些情况下,编写在用户控制下运行的Windows应用程序可能更合适。

以下是有关如何写入系统托盘的几个链接。您需要另一个应用程序来与服务进行交互,因为该服务无法在系统托盘中直接显示图标。

How can I make a .NET Windows Forms application that only runs in the System Tray?

http://msdotnetsupport.blogspot.com/2008/02/cnet-application-windows-system-tray.html

答案 1 :(得分:11)

您不能,不能直接,因为Windows服务必须在机器运行时启动,而不是在用户登录时启动。该服务也将在不同的上下文中运行,可能是作为不同的用户。

可以做的是编写一个基于系统托盘的“控制器”,与服务进行交互。