Как я могу отобразить значок в системном трее для службы окна С#.?
Как я могу отобразить значок в системной панели для службы окна С#.?
Ответ 1
Службы запускаются на другой оконной станции, чем вошедший в систему пользователь, поэтому для них не может быть значка в системном трее. Из https://docs.microsoft.com/en-us/dotnet/framework/windows-services/introduction-to-windows-service-applications:
Приложения Windows Service запускаются на другой оконной станции, чем интерактивная станция зарегистрированного пользователя. Окна станции - это защищенный объект, содержащий буфер обмена, набор глобальных атомов и группу объектов рабочего стола. Поскольку станция службы Windows не является интерактивной станцией, диалоговые окна, созданные из приложения-службы Windows, не будут видны и могут заставить вашу программу перестать отвечать на запросы. Аналогично, сообщения об ошибках должны регистрироваться в журнале событий Windows, а не подниматься в пользовательском интерфейсе.
Классы обслуживания Windows, поддерживаемые платформой .NET Framework, не поддерживают взаимодействие с интерактивными станциями, то есть с зарегистрированным пользователем..NET Framework также не включает классы, которые представляют собой станции и настольные компьютеры. Если ваша служба Windows должна взаимодействовать с другими станциями, вам необходимо получить доступ к неуправляемому API Windows. Дополнительные сведения см. В документации Windows SDK.
Взаимодействие службы Windows с пользовательскими или другими станциями должно быть тщательно спроектировано таким образом, чтобы включать такие сценарии, как отсутствие входа в систему пользователя или пользователь, имеющий неожиданный набор объектов рабочего стола. В некоторых случаях может быть более целесообразным написать приложение Windows, которое выполняется под управлением пользователя.
Вот несколько ссылок о том, как писать в системный трей. Для взаимодействия с сервисом вам потребуется другое приложение, так как у службы не может быть прямой значок на панели задач.
Как создать приложение .NET Windows Forms, которое работает только в системном лотке?
и
http://msdotnetsupport.blogspot.com/2008/02/cnet-application-windows-system-tray.html
Ответ 2
Вы не можете, а не напрямую, потому что служба Windows обязательно запускается, когда машина работает, а не когда пользователь входит в систему. Служба также будет работать в другом контексте, скорее всего, как другой пользователь.
Что вы можете сделать, так это написать отдельный системный лоток на основе "контроллера", который взаимодействует с сервисом.