En environnement Windows 7 64b.

Je dispose d'un service, lancé en mode administrateur. Ce dernier doit stopper :
1/ des applications exécutées en mode administrateur,
2/ des services exécutés en mode administrateur.

Pour le 1/, cela fonctionne.

mais pour le 2/, je ne comprends pas ce qui se passe.

Voici le code utilisé pour stopper un service :
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
20
21
22
23
24
25
26
27
28
29
30
31
 
function StopperService(NomService: string): DWORD;
var
  hsc: SC_HANDLE;
  hSchSvc: SC_HANDLE;
  SvcStatus: TServiceStatus;
begin
  hsc := OpenSCManager(nil, nil, STANDARD_RIGHTS_READ);
 
  if (hsc = 0) then
    Result := GetLastError
  else
  begin
    hSchSvc := OpenService(hsc, PChar(NomService), SERVICE_ALL_ACCESS);
    CloseServiceHandle(hsc);
 
    if (hSchSvc = 0) then
      Result := GetLastError
    else
    begin
      // Stoppe le service
      if ControlService(hSchSvc, SERVICE_CONTROL_STOP, SvcStatus) then
      begin
        CloseServiceHandle(hSchSvc);
        Result := ERROR_SUCCESS;
      end
      else
        Result := GetLastError
    end;
  end;
end;
Je précise que ce code fonctionne lorsqu'il est utilisé dans un programme, mais pas à partir d'un autre service...

Si quelqu'un pouvait éclaircir ma lanterne, je pense à une histoire de droits (fonctionne bien sous XP par exemple), mais je ne vois pas....

Par avance merci à vous tous.