Как я могу отобразить значок в системном трее для службы окна C#.?
Как я могу отобразить значок в системном трее для службы окна C#.?
2 ответа
Службы работают на другой оконной станции, нежели вошедший в систему пользователь, поэтому у вас не может быть значка в системном трее. Из https://docs.microsoft.com/en-us/dotnet/framework/windows-services/introduction-to-windows-service-applications:
Приложения службы Windows работают на другой оконной станции, чем на интерактивной станции вошедшего в систему пользователя. Оконная станция - это защищенный объект, который содержит буфер обмена, набор глобальных атомов и группу объектов рабочего стола. Поскольку станция службы 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
Вы не можете, не напрямую, потому что служба Windows будет обязательно запускаться, когда машина запускает, а не когда пользователь входит в систему. Служба также будет работать в другом контексте, вероятно, как другой пользователь.
Что вы можете сделать, так это написать отдельный "контроллер" в системном трее, который взаимодействует со службой.