¿Por qué los servicios de Windows no pueden tener una GUI?

22

Estaba usando esta función en versiones anteriores de Windows como XP y NT. Pude ejecutar una GUI desde un servicio de Windows. Pero no es posible en las versiones posteriores.

¿Cuál es la razón detrás de la eliminación de esta función? ¿Por qué los servicios de Windows no pueden tener una GUI?

Arun
fuente

Respuestas:

47

Principalmente razones de seguridad.

Según tengo entendido, cuando un servicio de Windows crea controles GUI como un cuadro de mensaje, normalmente solo se vieron en la sesión que los servicios se ejecutan en la sesión 0, que también solía ser el primer usuario que inició sesión localmente o que alguien inició sesión usando mstsc / admin. Por lo tanto, este usuario vería estos controles y podría interactuar con el servicio.

Pero por razones de seguridad, la sesión 0 ahora está reservada y el primer usuario que inicie sesión recibirá una nueva sesión y, por lo tanto, no verá los controles de la GUI.

Dado que esto rompe muchos servicios, por compatibilidad, hay un proceso (vea este blog de MSDN) que intenta detectar si se está mostrando algún mensaje y aparece una advertencia 'Un programa que se ejecuta en esta computadora está tratando de mostrar un mensaje 'y le permite ver o ignorar el mensaje.

Microsoft tiene un WhitePaper sobre este tema que puede descargar desde aquí

También sospecharía que otra razón menor es porque la característica fue mal utilizada / mal interpretada y condujo a malos diseños. Por ejemplo, solía tener un servidor antiguo con un servicio de terceros que mostraba algunas notificaciones / errores usando un cuadro de mensaje en lugar de escribir en el registro de eventos. Pero nunca inicié sesión localmente y rara vez inicié sesión en modo administrador y, por lo tanto, no vería los mensajes.

sgmoore
fuente
1
Tengo la sensación de que tenía algo que ver con UAC: asegurar eso significa que la solicitud de UAC no podía compartir una sesión de estación de trabajo con el usuario interactivo, o un pirata informático podría hacer estallar su propia pretensión de UAC.
gbjbaanb
23

Los servicios interactivos solían ser posibles , pero el modelo de servicio es el de un proceso que se ejecuta independientemente de cualquier usuario. Están diseñados para ejecutarse sin supervisión y, por lo tanto, no deberían necesitar una GUI.

Los servicios interactivos no han estado disponibles desde Windows Vista, por lo que ya no deberían utilizarse.

Si necesita interactuar con el servicio, la página a la que he vinculado recomienda crear una aplicación GUI separada que se comunique con el servicio a través de la comunicación entre procesos (IPC) de algún tipo, por ejemplo, canalizaciones con nombre.

ChrisF
fuente
Su probabilidad es obsoleta: los servicios no pueden interactuar directamente con un usuario a partir de Windows Vista. Por lo tanto, las técnicas mencionadas en la sección titulada Uso de un servicio interactivo no deben usarse en código nuevo.
Nemke
10

Porque se supone que los servicios se ejecutan en segundo plano sin interactuar con el usuario; De hecho, pueden ejecutarse mientras ningún usuario está conectado.

Michael Borgwardt
fuente
entonces, ¿por qué esta característica estaba allí en versiones anteriores? Considerando su respuesta, no habrá comunicación entre el servicio de Windows y la aplicación de escritorio. Entonces esta respuesta no puede ser apropiada.
Arun
3
@Arun: según esa lógica, las cosas que se rompen nunca se solucionarán. La respuesta de Michael es correcta: los servicios no deberían tener guis. El hecho de que las versiones anteriores de Windows los tuvieran (servicios con guis) no significa que deberían haberlos tenido.
8
@Arun no es cierto que no haya comunicación entre las aplicaciones y los servicios de escritorio, simplemente que el servicio en sí no tiene una GUI. Más bien, una aplicación de escritorio tiene la GUI y se comunica con el servidor.
Paul Hiemstra
Entonces, ¿los servicios de Windows pueden tener GUI pero no deberían tenerlos?
Arun
1
@Arun, los servicios no tienen GUI en sí mismos, pero a menudo están controlados por aplicaciones de front-end separadas que pueden controlar el servicio comunicándose con él de alguna manera (a través de tuberías, enchufes, ...)
GrandmasterB
0

Sí, fue posible y funcionó. Cuando inició sesión, obtuvo la interfaz de la aplicación. Fue muy útil para aplicaciones antiguas que no tienen un servicio disponible pero que aún necesitan ejecutarse en el servidor. Aunque no fue la solución más estable. Se convirtió en el usuario que podía hacer clic o cerrar sesión. Eso no fue muy agradable.

Ahora todos desarrollan servicios nativos y agregan una aplicación o registro para administrar el servicio. Ese es un buen patrón de diseño y ahora se usa la mayor parte del tiempo.

Así que míralo más como legado que fue posible.

Luc Franken
fuente
-1

Los servicios están destinados a operaciones no atendidas, principalmente en segundo plano. El servicio de nombre en sí mismo significa actuar como un servidor para algunas aplicaciones cliente u otros servicios que consumen este servicio. Por lo tanto, es posible que MS quiera seguir con lo básico y establecer una distinción clara entre los servicios y las aplicaciones, por lo que las aplicaciones mantienen ocupados los usos y permiten que los servicios cumplan su propósito en silencio. Mientras que el cortaúñas, ¿por qué elegir un cuchillo de cocina para cortar nils?

Tony Thomas
fuente