Я хотел бы сделать функцию удаления услуги.Delphi: make ServiceDelete function
Function ServiceDelete(sMachine, sService: String): Boolean;
Var
schm, schs: SC_Handle;
ss: TServiceStatus;
dwChkP: dword;
Begin
Result := False;
schm := OpenSCManager(PChar(sMachine), Nil, SC_MANAGER_CONNECT);
If schm > 0 Then Begin
schs := OpenService(schm, PChar(sService), SERVICE_STOP Or SERVICE_QUERY_STATUS);
If schs > 0 Then Begin
If (QueryServiceStatus(schs, ss)) Then Begin
While (SERVICE_STOPPED <> ss.dwCurrentState) Do Begin
ControlService(schs, SERVICE_CONTROL_STOP, ss);
dwChkP := ss.dwCheckPoint;
Sleep(ss.dwWaitHint);
If (Not QueryServiceStatus(schs, ss)) Then
Break;
If (ss.dwCheckPoint < dwChkP) Then
Break;
End;
End;
DeleteService(schs);
CloseServiceHandle(schs);
End;
CloseServiceHandle(schm);
// If service does not exist, then everything is fine.
schm := OpenSCManager(PChar(sMachine), Nil, SC_MANAGER_CONNECT);
If schm > 0 Then Begin
schs := OpenService(schm, PChar(sService), SERVICE_QUERY_STATUS);
If schs = 0 Then Begin
If GetLastError = ERROR_SERVICE_DOES_NOT_EXIST Then
Result := True;
End Else Begin
CloseServiceHandle(schs);
End;
CloseServiceHandle(schm);
End;
End;
End;
Он открывает диспетчер служб, открывает службу, выполняет DeleteService, но не удаляет службу. Функция возвращает false, и служба все еще существует. Что я делаю неправильно?
Вы не появляются, чтобы проверить на наличие ошибок последовательно. Почему нет? –