in src/native/windows/apps/prunsrv/prunsrv.c [930:978]
static BOOL docmdStopService(LPAPXCMDLINE lpCmdline)
{
APXHANDLE hService;
BOOL rv = FALSE;
apxLogWrite(APXLOG_MARK_INFO "Stopping service '%S'...",
lpCmdline->szApplication);
hService = apxCreateService(gPool, GENERIC_ALL, FALSE);
if (IS_INVALID_HANDLE(hService)) {
apxLogWrite(APXLOG_MARK_ERROR "Unable to open the Service Manager.");
return FALSE;
}
SetLastError(ERROR_SUCCESS);
/* Open the service */
if (apxServiceOpen(hService, lpCmdline->szApplication,
GENERIC_READ | GENERIC_EXECUTE)) {
rv = apxServiceControl(hService,
SERVICE_CONTROL_STOP,
0,
NULL,
NULL);
if (!rv) {
/* Wait for the timeout if any */
int timeout = SO_STOPTIMEOUT;
if (timeout) {
int i;
for (i = 0; i < timeout; i++) {
rv = apxServiceCheckStop(hService);
apxLogWrite(APXLOG_MARK_DEBUG "apxServiceCheck returns %d.", rv);
if (rv)
break;
}
}
}
if (rv)
apxLogWrite(APXLOG_MARK_INFO "Service '%S' stopped.",
lpCmdline->szApplication);
else
apxLogWrite(APXLOG_MARK_ERROR "Failed to stop service '%S'.",
lpCmdline->szApplication);
}
else
apxDisplayError(FALSE, NULL, 0, "Unable to open service '%S'.",
lpCmdline->szApplication);
apxCloseHandle(hService);
apxLogWrite(APXLOG_MARK_INFO "Stop service finished.");
return rv;
}