Bonjour a tous,

Je developpe actuellement un service non-interactive qui execute un programme externe avec la fonction suivante

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;
Prenons le cas ou il y a 2 utilsateurs dans le domaine (domain\user1 et domain\user2) :
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