Есть ли способ запустить приложение с графическим интерфейсом из службы Windows на Windows 7? - PullRequest
8 голосов
/ 21 февраля 2011

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

Ответы [ 3 ]

19 голосов
/ 21 февраля 2011

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

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

Если ваши службы работают под учетной записью LOCALSYSTEM, вы можете установить флажок «Разрешить службе взаимодействовать с рабочим столом», чтобы воспользоваться устаревшими службами, которые не будут работать, если они не смогут отображать пользовательский интерфейс. Но это все равно не поможет, потому что пользовательский интерфейс покажет в сеансе 0, где его никогда не видели!

Я рекомендую прочитать официальный документ Microsoft, описывающий изоляцию сеанса 0 .

2 голосов
/ 16 апреля 2015

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

http://blogs.msdn.com/b/codefx/archive/2010/11/26/all-in-one-windows-service-code-samples.aspx

1 голос
/ 21 февраля 2011

Windows 7 представила так называемую «изоляцию сеанса 0», которая на практике означает, что все службы (кроме системных служб) запускаются в отдельном неинтерактивном сеансе.По этой причине вы не можете напрямую создать графический интерфейс из службы, за исключением случаев, когда вы работаете в устаревшем режиме, отметив опцию Взаимодействовать с Destop , что не очень хорошо, если вы планируете запустить службу в течение нескольких лет вбудущее.

Как сказал Дэвид Хеффернан, лучше всего использовать архитектуру клиент-сервер.WCF упрощает связь с именованными каналами.

Эта страница является хорошей отправной точкой для чтения об изоляции сеанса 0, а этот официальный документ также очень хорош.

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