Bonjour a tous,
Je developpe actuellement un service non-interactive qui execute un programme externe avec la fonction suivante
Prenons le cas ou il y a 2 utilsateurs dans le domaine (domain\user1 et domain\user2) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 function RunInteractive(prog_filename: String; sessionID: Cardinal): boolean; var hToken: THandle; si: _STARTUPINFOA; pi: _PROCESS_INFORMATION; begin ZeroMemory(@si, SizeOf(si)); si.cb := SizeOf(si); SI.lpDesktop := nil; if WTSQueryUserToken(sessionID, hToken) then begin if CreateProcessAsUser(hToken, nil, PChar(prog_filename), nil, nil, False, 0, nil, PChar(ExtractFilePath(prog_filename)), si, pi) then result := true else result := false; end else Begin result := false; End; CloseHandle(hToken); end;
1. pour etre clean, j'installe le service et redemarre le systeme
2. si j'ouvre la session avec user1: le service lance bien le programme externe dont la form s'affiche a l'ecran
3.je ferme cette session et j'ouvre la session avec user2: le service lance bien le programme externe
Ca c'etait le cas le plus commun et si je le repete x fois, il n'ya jamais de probleme.
Maintenant prenons le cas suivant:
1. si j'ouvre la session avec le user1: le service lance bien le programme externe
2.Au lieu de fermer la session cette fois ci je change d'utilisateur avec le user2: le service lance bien le programme externe mais cette fois ci la form par défaut ne s'affiche pas et un message d'erreur apparait : Systeme Error Code 5, Accès refusé.
Il semblerait donc que quelque chose ne vas pas mais j'aimerais savoir quoi et je ne vois pas du tout. Merci d'avance pour vos reponses
Partager