windows-vista - online - tag files and folders
SesiĆ³n 0 Aislamiento (3)
Vista implementa una nueva seguridad que impide que la Sesión 0 acceda al hardware como la tarjeta de video, y el usuario ya no inicia sesión en la sesión 0. Sé que esto significa que no puedo mostrarle al usuario una GUI, sin embargo, eso también significa que no puedo mostrar uno en absoluto? La forma en que mi código está configurado en este momento, sería más trabajo hacer solo la línea de comando, sin embargo, si puedo usar mi código existente y simplemente administrar la GUI mediante programación, tomaría mucho menos código.
es posible?
El artículo de MSDN dice esto:
• Un servicio intenta crear una interfaz de usuario (IU), como un cuadro de diálogo, en la Sesión 0. Como el usuario no se está ejecutando en la Sesión 0, nunca ve la IU y, por lo tanto, no puede proporcionar la información que el servicio proporciona. buscando. El servicio parece dejar de funcionar porque está esperando una respuesta del usuario que no ocurre.
Lo que me hace pensar que es posible tener una interfaz de usuario automatizada, pero alguien me dijo que no podía usar SendKeys con un servicio porque estaba deshabilitado en la sesión 0.
EDITAR: en realidad no necesito mostrarle al usuario la GUI
Puede escribir un proceso por separado que proporcione la UI para su proceso de servicio. La comunicación entre su UI y el proceso de servicio se puede hacer de varias maneras (busque en la web "comunicación entre procesos" o "IPC").
Puedes mostrar uno; simplemente no aparece.
Hay una pequeña notificación en la barra de tareas sobre la existencia de una ventana de GUI y una forma de cambiar a ella.
De todos modos, en realidad hay un comando API de TerminalServices para cambiar la sesión activa a la que podrías llamar si realmente la necesitas.
Su servicio puede tener una GUI. Es simplemente que ningún humano lo verá jamás. Como sugiere la cita de MSDN, un servicio puede mostrar un cuadro de diálogo. La llamada a MessageBox
no fallará; simplemente no volverá nunca; no habrá nadie para presionar sus botones.
No estoy seguro de lo que quiere decir con querer "administrar la GUI". ¿En realidad se refiere a pretender enviar entrada a los controles, como con SendInput
? No veo ninguna razón para que no sea posible; Después de todo, SendInput
inyectando información en la cola de tu propio programa, y las advertencias específicas de Vista de SendInput
no dicen nada al respecto. Pero creo que harías las cosas mucho más complicadas de lo que deberían ser. Vuelve a la idea de modificar tu programa para que no tenga UI. (Eso no es lo mismo que tener un programa de consola. Las consolas son UI).
En lugar de simular los mensajes del mouse necesarios para hacer clic en un botón, por ejemplo, elimine al intermediario y simplemente llame directamente a la función que habría llamado el evento de clic de botón.