Как я могу заставить мою службу Windows отображаться в системном трее? - PullRequest
7 голосов
/ 17 марта 2009

У меня есть служба Windows, которая запускается в фоновом режиме при запуске ПК. Я хочу отобразить значок на панели задач, чтобы разрешить настройку после входа пользователя в систему, но не могу найти способ сделать это.

Есть ли событие, которое я должен искать, которое сообщает мне, что пользователь вошел в систему?

Насколько я понимаю, службы Windows не могут иметь пользовательского интерфейса, поэтому мне нужно запустить приложение для отображения значка системного трея? Как я могу передать обновления конфигурации в мой сервис.

Ответы [ 4 ]

11 голосов
/ 17 марта 2009

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

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

5 голосов
/ 17 марта 2009

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

2 голосов
/ 22 марта 2009

На самом деле, я не думаю, что вы МОЖЕТЕ показать сервис в системном трее. Приложения, которые делают это, всегда используют агент или другой инструмент управления.

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

Параметры конфигурации могут храниться в реестре, ini-файле или любом другом хранилище. После изменения конфигурации все, что вам нужно сделать, это убедиться, что вы перезапускаете службу, чтобы она могла перезагрузить свои новые настройки.

2 голосов
/ 17 марта 2009

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

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

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