Questione : È ci un senso fare “il lavoro di ShellExecuteEx ()„ da un'applicazione di servizio di Windows?

Stiamo usando “ShellExecuteEx ()„ per lanciare un altro processo (non-sezione comandi, GUI visibile) dalla nostra applicazione.   Ora abbiamo una necessità di fare funzionare l'applicazione in un servizio di Windows e “ShellExecuteEx () non funziona (probabilmente a causa della parte “delle coperture„).  È ci un senso fare “il lavoro di ShellExecuteEx ()„, o è ci un altro senso lanciare un processo della non-sezione comandi dall'interno di un servizio?  Stiamo lavorando in C++. class= del

Risposta : È ci un senso fare “il lavoro di ShellExecuteEx ()„ da un'applicazione di servizio di Windows?

più @rgautier: Il vostro consiglio è obsoleto e più di sostegno dal ms
A partire da Windows Vista, i servizi interattivi sono soltanto per motivo di compatibilità e non dovrebbero essere permessi a per i nuovi servizi.
In Vista e più nuovo, i servizi e gli utenti entrati risiedono sempre nella sessione terminale differente e soltanto il IPC è così possibile (in modo da nessun maniglie, messaggi della finestra e GUIs essere possibile). Vista e più nuovo visualizzeranno un cattivo messaggio d'avvertimento se provate a mostrare un dialogo in un servizio.

Invece dovete generare un nuovo processo nella sessione dell'obiettivo (inizio a 1), dove volete fare funzionare la vostra applicazione. Usare CreateProcessAsUser (CPAU) ma NON CreateProcess.  Richiamare il segno dell'utente con WTSQueryUserToken ed utilizzarlo in CPAU allora.
Altre soluzioni  
 
programming4us programming4us