Tengo un programa que se inicia al iniciar el sistema usando el Programador de tareas en Windows Server 2012. El programa debe iniciarse incluso si la computadora se reinicia automáticamente.
Administrador es la cuenta utilizada para iniciar el programa, la opción "Ejecutar si el usuario ha iniciado sesión o no" está marcada para la tarea.
El problema con esto es que cuando alguien finalmente inicia sesión como Administrador usando Remote Desktop Connection, la interfaz (ventana del programa) está oculta.
Según tengo entendido, no hay forma de resolver esto usando el Programador de tareas.
¿Como puedo resolver esto?
Debería ser un problema bastante común, pero no puedo encontrar nada buscando en la red. Estoy bastante sorprendido de que Microsoft permita tal limitación en su programador. ¿Puedo hacer un VBScript o algo que se ejecute en el inicio y ejecute el programa que luego será visible cuando el usuario inicie sesión?
¿Otras ideas?
(Por cierto, no quiero tener que hacer un programa separado de solo GUI que se conecte al programa original. También preferiría que no tuviera que terminar el programa que ya se está ejecutando al iniciar sesión por el usuario y luego iniciarlo de nuevo.)
Respuestas:
Descubrí cómo hacerlo yo mismo. Es una solución alternativa, pero eso es lo que esperaba obtener.
http://technet.microsoft.com/sv-se/sysinternals/bb963905.aspx
¡Detener! No te avergüences todavía. Sigue leyendo ...
Ejecútelo, configúrelo para que el Administrador inicie sesión automáticamente.
Crear una tarea en el Programador de tareas. Configúrelo para que se ejecute solo cuando el usuario (Administrador) haya iniciado sesión. El activador está "al iniciar sesión" y especifique que es solo cuando el Administrador inicia sesión.
Crea una segunda tarea. Ejecutar solo cuando el usuario haya iniciado sesión, disparar al iniciar sesión como administrador. La acción debe ser "iniciar un programa" y el programa es "C: \ Windows \ System32 \ rundll32.exe" con el campo de argumento establecido en "user32.dll, LockWorkStation".
Lo que sucede ahora si reinicia la computadora es que el Administrador inicia sesión automáticamente, el programa que desea iniciar se inicia y la estación de trabajo se bloquea. Si inicio sesión a través de Remote Desktop Connection, puedo ver la ventana del programa y usar la GUI. Puedo bloquear / desbloquear la computadora sin problemas y desconectar / volver a conectar como me plazca. No hay problema si voy al servidor e inicio sesión en la estación de trabajo real. Dado que el administrador ya ha iniciado sesión, la tarea no se ejecutará nuevamente (no crea un bucle infinito de inicio de sesión que no se puede romper).
Simple como eso. De acuerdo, hay un segundo período de tiempo antes de que la computadora se bloquee después del inicio de sesión automático y supongo que un hacker profesional con acceso físico a la computadora podría hacer algo astuto durante este período de tiempo, pero en mi caso puedo pasar por alto ese riesgo de seguridad. Mientras no permita que ningún hacker profesional entre a mi casa y les muestre la computadora, el sistema debería ser relativamente seguro. Por encima de todo, no hay tanto valor en la computadora que necesita protección de súper bóveda, así que estoy bastante contento con esta solución.
fuente
SuperUser
. Si se pudiera responder a ella no será una gran ayuda - superuser.com/questions/902386/...Entonces, ¿por qué no lo convierte en un servicio del sistema, como lo definen las especificaciones de Windows?
No puedes. No se supone que los programas en segundo plano interactúen con la interfaz de usuario. O bien: la interfaz de usuario debe ejecutar su propio programa que luego se conecta al servicio. La IU que se ejecuta en el espacio de usuario del usuario conectado realiza la presentación, el servicio de Windows realiza el procesamiento. Así es como el modelo está diseñado para unos 15 años más o menos.
Me sorprende más que nunca te hayas molestado en preguntar por qué.
Hay múltiples problemas:
Ni a mí ni a Microsoft nos importa en este momento lo que te gusta hacer. Existe un modelo establecido y admitido para vincular el procesamiento en segundo plano a una IU de usuario conectado; utilícelo o no. Pero cuando no, no se queje de los problemas de seguridad que haya presentado.
fuente
Se trata de
Session
que su programa se ejecute. Si nadie ha iniciado sesión, no hay una sesión interactiva para mostrar, creo que se ejecuta bajoSession 0
, que tiene una interfaz de usuario extraña que no se muestra como las demás.Ahora, si su programa detecta cuándo se
explorer.exe
inicia (o alguna otra forma de detectar el inicio de sesión del usuario) y se reorientó mágicamente o generó algún proceso secundario en ese nuevo sessionid, cualquiera que inicie sesión verá felizmente lo que está haciendo.fuente