【问题标题】:How can I display a system tray icon for C# window service.?如何为 C# 窗口服务显示系统托盘图标?
【发布时间】:2010-04-16 10:44:16
【问题描述】:

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

【问题讨论】:

    标签: c# windows


    【解决方案1】:

    服务在与登录用户不同的窗口站中运行,因此您不能为它们设置系统托盘图标。来自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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-02-20
        • 1970-01-01
        • 1970-01-01
        • 2011-09-18
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 2011-06-25
        相关资源
        最近更新 更多