一尘不染

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

c#

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


阅读 428

收藏
2020-05-19

共1个答案

一尘不染

服务在与登录用户不同的窗口站中运行,因此您不能为它们提供系统任务栏图标。从https://docs.microsoft.com/zh-
cn/dotnet/framework/windows-services/introduction-to-windows-service-
applications:

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

.NET Framework支持的Windows服务类不支持与交互式工作站(即登录的用户)进行交互。.NET
Framework还不包括代表工作站和桌面的类。如果Windows服务必须与其他工作站进行交互,则需要访问非托管Windows
API。有关更多信息,请参见Windows SDK文档。

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

这里有几个有关如何写入系统托盘的链接。您将需要另一个应用程序来与该服务交互,因为该服务不能直接在系统任务栏中显示图标。

如何制作仅在系统托盘中运行的.NET
Windows窗体应用程序?

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

2020-05-19