Служба Windows с графическим монитором? - PullRequest
4 голосов
/ 01 июля 2010

У меня есть приложение C32 Win32, которое было написано как проект с графическим интерфейсом Windows, и теперь я пытаюсь сделать его гибридом Service / GUI.Я понимаю, что служба Windows не может / не должна иметь пользовательский интерфейс.Но позвольте мне объяснить, что у меня есть и для чего я стреляю.

ЧТО Я СЕЙЧАС - это приложение для Windows.Когда он запускается, он помещает значок в системный трей, который вы можете дважды щелкнуть, чтобы открыть графический интерфейс.Цель этого приложения - обрабатывать файлы, расположенные в указанном каталоге, по ночному расписанию.Графический интерфейс состоит из следующих элементов:

  • Кнопка для запуска внепланового сканирования / процесса вручную.
  • Кнопка для открытия диалогового окна для изменения настроек.
  • AОкно списка для отображения сообщений о состоянии, отправленных из потока обработки.
  • Пользовательское нарисованное окно для отображения данных изображения (обработка файла включает в себя создание и сохранение изображений).
  • Строка состояния - времяпроцесс не запущен, он показывает обратный отсчет до следующего запланированного сканирования.Во время сканирования он также предоставляет некоторую обратную связь о состоянии, в том числе индикатор выполнения.

ЧТО Я СНИМАЮ ДЛЯ - это служба, которая будет работать при загрузке и не требуетпользователь для входа.Это будет состоять из запланированной обработки файлов.Однако, когда пользователь входит в систему, я все же хотел бы, чтобы иконка в трее была загружена и позволяла ему открывать графический интерфейс пользователя, как я описал выше, для мониторинга текущего состояния сервиса, изменения настроек, запуска сканирования вручную и отслеживания хода выполнения.сканирования.

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

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

Возможно также, что я совершенно не в своей базе, и Служба совсем не то, что я ищу.

Любая помощь / идеи / предложения будут с благодарностью!Спасибо.

Ответы [ 2 ]

6 голосов
/ 01 июля 2010

Вы не можете сделать это как услугу.

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

Затем вы создадите совершенно отдельное приложение с графическим интерфейсом, которое «общается» со службой. Это можно настроить на запуск при входе пользователя в учетную запись пользователя.

Чтобы они могли «разговаривать» друг с другом, вам нужно использовать некоторую форму IPC . Поскольку они работают в одной и той же системе (но обычно в разных учетных записях), именованные каналы или сокеты работают достаточно хорошо.

1 голос
/ 09 октября 2017

Есть простой способ сделать это.

Служба не может иметь доступ к любому сеансу пользователя (сеанс 1,2,3 ..), поскольку службы изолированы и могут иметь доступ только к сеансу 0. Это изменение с 2011 года.

Вы должны написать программу win32, которая будет запускаться вашим сервисом для каждого пользователя, который входит в систему, используя https://msdn.microsoft.com/en-us/library/windows/desktop/ms682429(v=vs.85).aspx

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

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