El servicio que inicia un proceso no mostrará GUI C #

Oye, estoy tratando de obtener un servicio para iniciar mi progtwig, pero no muestra la GUI. El proceso comienza pero no se muestra nada. Intenté habilitar “Permitir que el servicio interactúe con el escritorio”, pero eso todavía no funciona. Mi progtwig es un dispositivo de locking de computadora para evitar que usuarios no autorizados accedan a la computadora. Estoy ejecutando Windows 7 con un sistema operativo de 64 bits.

Aquí está el código para mi servicio:

protected override void OnStart(string[] args) { Process p = new Process(); p.StartInfo.FileName = "notepad.exe"; p.Start(); FileStream fs = new FileStream(@"C:\Users\David\Documents\Visual Studio 2010\Projects\LockPCService\LockPCService\bin\Debug\ServiceLog.dj", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(" LockPCService: Service Started " + DateTime.Now + "\n" + "\n"); m_streamWriter.Flush(); m_streamWriter.Close(); } protected override void OnStop() { FileStream fs = new FileStream(@"C:\Users\David\Documents\Visual Studio 2010\Projects\LockPCService\LockPCService\bin\Debug\ServiceLog.dj", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(" LockPCService: Service Stopped " + DateTime.Now + "\n"); m_streamWriter.Flush(); m_streamWriter.Close(); } 

Para intentar que el servicio funcione, estoy usando notepad.exe. Cuando miro los procesos, el bloc de notas se está ejecutando pero no hay una GUI. Además, el ServiceLog está allí y funciona cada vez que lo ejecuto.

¿Alguna idea sobre por qué esto no está funcionando?

Gracias.

Este artículo explica el Session 0 Isolation que, entre otras cosas, impide que los servicios creen una interfaz de usuario en Windows Vista / 7. En su servicio, comienza otro proceso, comienza en la Sesión 0 y tampoco muestra ninguna IU. (Por cierto, se crea la interfaz de usuario, es solo que la sesión 0 nunca se muestra). Este artículo en CodeProject puede ayudarlo a crear un proceso desde un servicio en el escritorio del usuario y mostrar su UI.

Además, considere envolver sus objetos continuos en una statement de using para que se eliminen correctamente.

Los servicios se ejecutan bajo una cuenta diferente, por lo que el bloc de notas lo ejecuta otro usuario y en otro escritorio, por lo que no puede verlo. ‘Permitir que el servicio interactúe con el escritorio’ ya no se admite desde Vista.

Sé que esta es una publicación tardía, pero encontré que este artículo fue muy útil para mí. Estoy ejecutando Windows 7 y la solución proporcionada en este artículo funciona muy bien.

Si descarga el código, hay una clase llamada ApplicationLoader . Incluye esa clase en tu proyecto y luego es tan simple como esto:

 // the name of the application to launch String applicationName = "cmd.exe"; // launch the application ApplicationLoader.PROCESS_INFORMATION procInfo; ApplicationLoader.StartProcessAndBypassUAC(applicationName, out procInfo); 

Los servicios se ejecutan en una sesión de inicio de sesión diferente y tienen una estación de ventana diferente del usuario. Eso significa que toda la actividad de GUI se segrega de los progtwigs del usuario, no que el servicio no pueda mostrar una GUI. En realidad, este diseño hace que sea mucho más fácil bloquear temporalmente el acceso a los progtwigs del usuario.

Deberá llamar a SwitchDesktop .