Tuer un service à partir d'un autre service
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:
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.