Cuestión : ¿Hay una manera de hacer el trabajo de “ShellExecuteEx ()” de un uso de servicio de Windows?

Hemos estado utilizando “ShellExecuteEx ()” para poner en marcha otro proceso (no-consola, GUI visible) de nuestro uso.   Ahora tenemos una necesidad de funcionar el uso en un servicio de Windows, y “ShellExecuteEx () no trabaja (probablemente debido a “pieza de la cáscara la”).  ¿Hay una manera de hacer el trabajo de “ShellExecuteEx ()”, o hay otra manera de poner en marcha un proceso de la no-consola dentro de un servicio?  Estamos trabajando en C++. class= del

Respuesta : ¿Hay una manera de hacer el trabajo de “ShellExecuteEx ()” de un uso de servicio de Windows?

más @rgautier: Su consejo es obsoleto y apoyado no más por el ms
A partir de Windows Vista, los servicios interactivos están solamente por razón de la compatibilidad y no se deben permitir para los nuevos servicios.
En Vista y más nuevo, los servicios y los usuarios abiertos una sesión residen siempre en diversa sesión de terminal y solamente el IPC es así posible (así que ningunas manijas, mensajes de la ventana y GUIs ser posible). Vista y más nuevo exhibirán un mensaje de alerta repugnante si usted intenta demostrar un diálogo en un servicio.

En lugar usted tiene que crear un nuevo proceso en la sesión de la blanco (comienzo en 1), donde usted quiere funcionar su uso. Utilizar CreateProcessAsUser (CPAU) pero NO CreateProcess.  Recuperar el símbolo del usuario con WTSQueryUserToken y después utilizarlo en CPAU.
Otras soluciones  
 
programming4us programming4us