Sesión interactiva 0 en Windows 7


14

Estoy intentando iniciar cmd.exe en la sesión 0. Hasta ahora he hecho lo siguiente desde un símbolo del sistema elevado:

sc config UI0Detect start= auto
net start UI0Detect

Y la respuesta indica que el servicio se inició correctamente. Es en este punto que supuse que si cambiaba a la sesión 0, cmd.exe se estaría ejecutando.

Me cambio a la sesión 0 usando el siguiente comando:

rundll32 winsta.dll,WinStationSwitchToServicesSession

Esto me cambia exitosamente a la sesión 0, pero la única ventana que está disponible es la que tiene la opción de regresar a la sesión 1.

¿Cómo consigo cmd.exe para iniciar en la sesión 0?


Por qué querrías hacer esto? UI0Detect permite que los servicios antiguos muestren un cuadro de mensaje, sin iniciar nuevas aplicaciones GUI. cmd.exe tiene una GUI
Peter Hahndorf

66
@PeterHahndorf Entiendo que es divertido desviar la respuesta a las preguntas diciendo "demos un paso atrás y veamos si esto es lo que realmente necesitamos hacer porque esto suena como una mala idea", y es una forma relativamente buena de condescender con otros desarrolladores. Pero dado que esto es para un escenario de depuración y pretende ser una solución rápida (y una alternativa al uso de alguna aplicación de terceros como AlwaysUp), realmente no veo cómo preguntar "por qué" es una respuesta útil. Gracias de cualquier manera.
omghai2u

Creo que Peter tiene un punto. La pregunta que debería haber escrito es "Esto es lo que estoy tratando de hacer". Una solución rápida solo implicará un dolor futuro. No puedo contar cuántas veces he escuchado "solución rápida" solo para ver todavía la "solución rápida" en producción tres años después. . . necesitando otra "solución rápida". ¿Asumo que está escribiendo para ejecutar un script por lotes de algún tipo?
surfasb

1
@surfasb La pregunta que sugirió es esencialmente la pregunta que escribí: "Estoy tratando de iniciar cmd.exe en la sesión 0". Mantenga las respuestas enfocadas en esa pregunta. Gracias. Y no hay posibilidad de que esto llegue a la producción, o que implique dolor en el futuro. La forma en que lo hago para la producción ya está configurada, pero no puedo usarla para la depuración. La forma en que lo hago actualmente para la depuración es engorrosa e implica el uso de una aplicación de terceros.
omghai2u

Respuestas:


19

Para iniciar cmd.exe en la sesión 0, use psexec de Sysinternals

psexec.exe -s 0 cmd.exe

Ahora tiene una consola ejecutándose en la sesión 0,

También puede iniciar cmd.exe en la sesión 0 y mostrar la GUI:

psexec.exe -s -i 0 cmd.exe

de esa manera, cuando cambie a la sesión 0, el cmd.exe lo estará esperando allí.

tiene tantos derechos como pueda obtener en Windows 7:

whoami /all

Si usa otras PsTools, recuerde usar el modificador / acceptteula:

pslist /accepteula

de lo contrario, el programa muestra un cuadro de mensaje para pedirle que acepte el Eula, el programa se bloqueará porque no hay una interfaz de usuario en la sesión 0 para cerrar el cuadro de mensaje.

Para verificar que se está ejecutando en la sesión 0, puede usar qprocess:

qprocess /ID:0

verá su 'cmd.exe' entre todos los procesos de servicio.


Impresionante gracias por intentar responder a mi pregunta. Sin duda, esto funcionaría, mi intención específica (como se señala en los comentarios), sin embargo, era evitar el uso de aplicaciones de terceros. ¿Hay una buena manera de hacer esto que no requiera el uso de las herramientas SysInternals (o realmente cualquier cosa que no esté disponible en Windows)? Gracias de nuevo.
omghai2u

2
No considero que las herramientas de Sysinternal sean de terceros, son de Microsoft y no tiene que instalarlas.
Peter Hahndorf

Lo sentimos, estaba considerando cualquier cosa que no esté instalada por defecto como "tercera parte".
omghai2u

Peter Increíble gracias. Funciona perfectamente para iniciar un proceso en la sesión 0 (lo que significa que sigue ejecutándose cuando cierra sesión).
Daniel James Bryars

55
La primera línea de comando es incorrecta: se -sejecuta como SYSTEMusuario y no acepta argumentos. ¿Quizás quiso decir -i 0en el primer ejemplo y -s -i 0en el segundo?
jwg

1

No va a funcionar Simplemente inicia un proceso como Sistema.

Los servicios son programas escritos de una manera especial para aceptar comandos del administrador de control de servicios.

MS tiene una utilidad que permite ejecutar un programa como servicio. Se llama Srvanyy se encuentra en las Herramientas del Kit de recursos de Windows 2003.

Descargue las herramientas del Kit de recursos de Windows Server 2003


0

Descubrí la solución por accidente un día, pero http://www.alex-ionescu.com/?p=59 también documenta una solución cercana a lo que encontré

Cree un archivo por lotes con lo siguiente (llámelo some.bat)

start cmd

Luego, cree un servicio para llamar a este archivo por lotes (mediante un símbolo del sistema de administración)

sc create access0 type= interact type= own binpath= some.bat

(Tenga en cuenta el espacio después de cada =, y sugiero usar la ruta completa para some.bat)

Entonces es cuestión de comenzar los servicios

sc start ui0detect
sc start access0

(No es necesario hacer que ui0detect arranque automático con sc config UI0Detect start = auto)

¡Y si todo va bien, obtendrá el cuadro intermitente de mensajes inminentes! Vaya a Ver mensajes y obtendrá un símbolo del sistema de administrador (nt autoridad \ sistema) que no se destruirá automáticamente por un inicio de servicio fallido (de ahí la necesidad de un archivo por lotes con el comando de inicio)

Esto funciona, aunque a veces no funciona el primer intento.

Creo que esto le da acceso a la sesión interactiva 0 solamente, que solo existe para la autoridad nt \ usuario del sistema


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.