Ik wil mijn service voor het de-installeren eerst stoppen. Voor het stoppen van een service gebruik ik onderstaande code. Maar als ik dit in mijn eigen service gebruik bij ServiceBeforeUninstall dan werkt deze code niet. Heb ook soortgelijke code geprobeerd. Maar die werken ook niet. Lijkt er op dat ik vanuit de service zelf dit niet zo mag doen. Als ik de code uitvoer in een ander (extern) programma kan ik de service probleemloos stoppen.
Code:
//STOP A SERVICE//
// return TRUE if service succesfully STOPPED
// aMachineName:
// machine name, ie: \\DESKTOP, if empty = local machine
// aServiceName
// service name, ie: W32Time
function ServiceStop(aMachineName, aServiceName: string): boolean;
var
schm,schs: SC_Handle;
ss: TServiceStatus;
dwChkP: DWord;
begin
schm := OpenSCManager(PChar(aMachineName), nil, SC_MANAGER_CONNECT);
if (schm > 0) then begin
schs := OpenService(schm, PChar(aServiceName), SERVICE_STOP or SERVICE_QUERY_STATUS);
if (schs > 0) then begin
if (ControlService(schs, SERVICE_CONTROL_STOP, ss)) then begin
if (QueryServiceStatus(schs,ss)) then begin
while (SERVICE_STOPPED<> ss.dwCurrentState) do begin
dwChkP := ss.dwCheckPoint;
Sleep(ss.dwWaitHint);
if (not QueryServiceStatus(schs,ss)) then break;
if (ss.dwCheckPoint < dwChkP) then break;
end;
end;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := SERVICE_STOPPED = ss.dwCurrentState;
end;
Dus hoe kan ik mijn service het beste stoppen bij ServiceBeforeUninstall
Bookmarks