Подтвердить что ты не робот

Как я могу отобразить значок в системной панели для службы окна С#.?

Как я могу отобразить значок в системном трее для службы окна С#.?

4b9b3361

Ответ 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 обязательно запускается, когда машина работает, а не когда пользователь входит в систему. Служба также будет работать в другом контексте, скорее всего, как другой пользователь.

Что вы можете сделать, так это написать отдельный системный лоток на основе "контроллера", который взаимодействует с сервисом.