Чому служби Windows не можуть мати графічний інтерфейс?


22

Я використовував цю функцію в попередніх версіях Windows, таких як XP та NT. Мені вдалося запустити графічний інтерфейс із сервісу Windows. Але в наступних версіях це неможливо.

У чому причина усунення цієї функції? Чому служби Windows не можуть мати графічний інтерфейс?

Відповіді:


47

В основному причини безпеки.

Як я розумію, коли служба вікон створює GUI елементи управління , такі як MessageBox, вони зазвичай можна побачити тільки в сесії , що пробіги послуг в цей же Session 0 , які також використовуються , щоб бути першим користувач увійшов в систему локально або ким - то протоколювання на використанні mstsc / admin. Отже, цей користувач побачить ці елементи керування та може взаємодіяти зі службою.

Але з міркувань безпеки зараз сесія 0 зарезервована, і першому користувачеві, який увійде в систему, буде надано нове сеанс, і, отже, не буде показано елементів керування графічним інтерфейсом.

Оскільки це порушує досить багато служб, для сумісності існує процес (див. Цей блог MSDN), який намагається визначити, чи відображаються якісь повідомлення, і спливає з попередженням: «Програма, що працює на цьому комп’ютері, намагається відобразити повідомлення 'і дозволяє переглядати або ігнорувати повідомлення.

Microsoft має WhitePaper з цього приводу, який ви можете завантажити тут

Я б також підозрював, що ще одна незначна причина полягає в тому, що цю функцію неправильно використали / неправильно зрозуміли та призвели до поганих конструкцій. Наприклад, у мене був старий сервер із стороннім сервісом, який відображав деякі сповіщення / помилки, використовуючи поле повідомлень, а не записуючи до журналу подій. Але я ніколи не входив локально і рідко входив у режим адміністрування, отже, я б не бачив повідомлень.


1
У мене є відчуття, що це має щось спільне з UAC - забезпечення цього означає, що запит UAC не міг поділитися сеансом робочої станції з інтерактивним користувачем, або хакер може виправити свій власний вигляд, що є підказом UAC.
gbjbaanb

23

Раніше були можливі інтерактивні сервіси , але модель сервісу - це процес, який працює незалежно від будь-якого користувача. Вони розроблені так, щоб вони працювали без нагляду і тому не повинні мати GUI.

Інтерактивні послуги недоступні з Windows Vista, тому їх більше не слід використовувати.

Якщо вам потрібно взаємодіяти зі службою, сторінка, на яку я пов’язана, рекомендує створити окрему програму GUI, яка спілкується зі службою за допомогою міжпроцесорного зв'язку (IPC) певного типу - наприклад, названих труб.


Ваш подібний файл застарів: служби не можуть безпосередньо взаємодіяти з користувачем, як у Windows Vista. Тому методи, згадані в розділі «Використання інтерактивної послуги», не повинні використовуватися в новому коді.
nemke

10

Оскільки послуги повинні працювати у фоновому режимі без взаємодії з користувачем; насправді вони можуть працювати, поки жоден користувач не входить у систему.


Тоді чому ця функція була в попередніх версіях? Зважаючи на відповідь ур, зв’язок між службою Windows та настільним додатком не буде. Тож ця відповідь не могла бути доречною.
Арун

3
@Arun - виходячи з цієї логіки, тоді речі, які порушені, ніколи не будуть виправлені. Відповідь Майкла правильна - служби не повинні мати підстав. Просто тому , що більш ранні версії вікон були їх (послуги з ДПІ) не означає , що вони повинні були їх.

8
@Arun це неправда, немає зв’язку між настільними програмами та службами, лише те, що в самому сервісі немає графічного інтерфейсу. Швидше, настільний додаток має графічний інтерфейс і спілкується з сервером.
Пол Хіемстра

Так, служби Windows можуть мати графічний інтерфейс, але вони не повинні мати їх?
Арун

1
@Arun, сервіси не мають самих графічних інтерфейсів, але вони часто контролюються окремими додатками на передньому кінці, які можуть керувати службою, спілкуючись з нею певним чином (через названі труби, розетки, ...)
GrandmasterB

0

Так, можна було, і це спрацювало. Після входу в систему ви отримали інтерфейс програми. Це було дуже корисно для старих програм, які не мають служби, але все ще потребують роботи на сервері. Хоча це було не найстабільнішим рішенням. Він запустився як той користувач, який міг натиснути його або вийти з системи. Це було не дуже приємно.

Тепер усі розробляють натільні сервіси та додають додаток або журнал для управління послугою. Це гарна модель дизайну і зараз використовується більшість часу.

Тож розглядайте це більше як спадщину, що це було можливо.


-1

Послуга призначена для не відвідуваних операцій, головним чином у фоновому режимі. Сама послуга імен означає функцію сервера для деяких клієнтських додатків або інших служб, які споживають цю послугу. Таким чином, MS може захотіти тепер дотримуватися основ і хотіти зробити чітке розмежування між службами та Apps.Таким чином додатки не дозволяють використовувати заняття і нехай сервіси мовчки служать своєму призначенню. Хоча різач для нігтів є, навіщо їхати за кухонним ножем, щоб вирізати нулі?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.