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

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

39
задан Ben Collins 23 September 2011 в 14:03
поделиться

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 должна взаимодействовать с другими станциями, вам потребуется доступ к неуправляемому Windows API. Дополнительные сведения см. В документации Windows SDK.

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

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

Как я могу сделать.NET Windows Forms, которое работает только в области уведомлений?

и

http://msdotnetsupport.blogspot.com/2008/02/cnet-application-windows-system-tray.html

36
ответ дан 27 November 2019 в 02:48
поделиться

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

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

12
ответ дан 27 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: