Служба Windows, вызывающая приложение Windows Forms - вызовет ли графический интерфейс проблемы? - PullRequest
2 голосов
/ 14 сентября 2011

У меня есть серверное приложение Server.exe, которое прослушивает порт TCP и отвечает клиентам, которые к нему подключаются.В настоящее время это приложение Windows Forms с установленным графическим интерфейсом для отладки (показывает, кто подключился и некоторые другие сообщения).

Я хотел бы создать службу Windows, которая запустит этот Server.exe, а также будет гарантировать, что Server.exe всегда работает (перезапускает его, если по какой-либо причине происходит сбой).Служба запустит сервер, создав новый Process (из Server.exe).Служба может быть запущена (и обычно работает), когда ни один пользователь не вошел в систему. Так как Server.exe имеет некоторый графический интерфейс, это создаст какие-либо проблемы в сценарии, в котором не зарегистрирован ни один пользователь?* ( Мне все равно, что GUI не будет виден, я просто хочу быть уверен, что наличие GUI не мешает приложению работать должным образом в контексте, где GUI недоступен / не виден (т.е.ни один пользователь не вошел в систему) ).

Примечание. Приложение не зависит от какого-либо конкретного пользовательского ввода, а также имеет несколько длительных фоновых потоков (которые также не зависят от пользовательского ввода).

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

Вместо того, чтобы ваш дизайн руководствовался требованиями к информации / отладке, было бы лучше, если бы ваша служба Windows сама выполняла всю работу, такую ​​как прослушивание порта и ответ.Тогда есть отдельное приложение Windows Forms только для отладки.Это приложение может отправлять информационные запросы в службу Windows через другой порт и отображать результаты.

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

Вы можете использовать функцию API CreateProcessAsUser , чтобы создать процесс на рабочем столе конкретного пользователя.Но это будет работать, только если этот конкретный пользователь вошел в систему.И обратите внимание на предостережения, изложенные в этой ссылке о взаимодействии пользователей.

0 голосов
/ 14 сентября 2011

Раньше было возможно создать интерактивную службу для Windows, однако Microsoft настоятельно не рекомендует это делать.На вкладке LogOn диалогового окна свойств службы есть флажок.

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

Однако если вы хотите продолжить этот маршрут, тогда этот , вероятно, является хорошей отправной точкой.

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