Lancer une appli par un service windows [Résolu]

Signaler
Messages postés
18
Date d'inscription
vendredi 22 septembre 2006
Statut
Membre
Dernière intervention
22 février 2008
-
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
-
Bonjour,

J'ai un petit problème avec le service windows que j'ai créé. Il fonctionne bien mais j'ai besoin qu'il lance une applcation, j'utilise :

#include <windows.h>
#include <shellapi.h> 
  
 HWND hwnd; 
  
 int rc = (int) ShellExecute(hwnd,"open","C:\\Windows\\system32\\calc.exe",NULL,NULL,SW_SHOWNORMAL);

le service est actif et il lance calc.exe (visible dans le gestionnaire des taches), mais sous l'utilisateur system, du coup le programme ne se lance pas. Quelqu'un aurait-il une solution ?

11 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Allez lire dans MSDN les différents mode de lancement de service et donc le mode d'interaction desktop.

ciao...
BruNews, MVP VC++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Qu'est ce que tu entends par utilisateur system ?

Shell
Messages postés
18
Date d'inscription
vendredi 22 septembre 2006
Statut
Membre
Dernière intervention
22 février 2008

dans le gestionnaire des taches dans la colonne "nom de l'utilisateur" en face de calc.exe j'ai "SYSTEM"
Messages postés
18
Date d'inscription
vendredi 22 septembre 2006
Statut
Membre
Dernière intervention
22 février 2008

Le service windows est installé sous el compte system. Du coup la commande shellexecute lance les fichiers pour l'utilisateur system. Le gestionnaire des taches les liste mais ils ne se lancent pas dans windows.
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Le système est lancé au démarrage de Windows. Il va donc de soit que l'utilisateurs soit SYSTEM.
Pour lancer l'appli essaye plutot ca :

ShellExecute(NULL,"open","C:\\Windows\\system32\\calc.exe",NULL,NULL,SW_SHOWNORMAL);

Shell
Messages postés
18
Date d'inscription
vendredi 22 septembre 2006
Statut
Membre
Dernière intervention
22 février 2008

J'ai testé ce changement, mais ca ne change rien, toujours calc.exe qui apparait dans le gestionnaire des taches, mais pas la moidre calculatrice qui se lance. D'ailleurs je précise que le problème est le même : quelque soit l'exe, pour les fichiers également et meme pour un .bat qui lance une appli normalement sous windows mais pas avec le service.
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
BruNews> url ? Je t'avoue que les services sont une inconnue pour moi, tout du moins je ne me suis limité qu'a en créer tout simplement.

Shell
Messages postés
18
Date d'inscription
vendredi 22 septembre 2006
Statut
Membre
Dernière intervention
22 février 2008

Ok, c'était en effet un problème d'intéraction avec le bureau.


Il fallait cocher la case "autoriser le service à intergagir avec le bureau" dans les propriétés du service.


Reste à trouver comment cocher cette case à l'install du service.


Je lance un nouveau topic pour cette question car je ne trouve pas, après avoir essayer tous les modes d'installations dispo !!
Messages postés
18
Date d'inscription
vendredi 22 septembre 2006
Statut
Membre
Dernière intervention
22 février 2008

Merci a deathcrash et à brunews pour leur aide :-)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Ajoute flag SERVICE_INTERACTIVE_PROCESS au 5eme param de CreateService().

ciao...
BruNews, MVP VC++
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
22
oui pour SERVICE_INTERACTIVE_PROCESS et tu peux aussi essayer ou les fonctions _exec() _execlp() ou lancer un nouveau thread en prenant le GetThreadDesktop() comme thread appelant.
Je n'ai pas essayé mais c'est à voir.