Как я могу отобразить значок в системном трее для службы окна C #.? - PullRequest
38 голосов
/ 16 апреля 2010

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

Ответы [ 2 ]

35 голосов
/ 16 апреля 2010

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

11 голосов
/ 16 апреля 2010

Вы не можете, не напрямую, потому что служба Windows обязательно запустится, когда машина запускается, а не когда пользователь входит в систему. Служба также будет работать в другом контексте, вероятно, как другой пользователь.

То, что вы можете сделать, - это написать отдельный «контроллер» в системном трее, который взаимодействует со службой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...