status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
status.dwCurrentState = dwCurrentState;
- if (dwCurrentState == SERVICE_START_PENDING)
+ if (dwCurrentState == SERVICE_START_PENDING
+ || dwCurrentState == SERVICE_STOP_PENDING
+ || dwCurrentState == SERVICE_STOPPED)
status.dwControlsAccepted = 0;
else
{
static void WINAPI ServiceCtrlHandler(DWORD code)
{
- DWORD state = SERVICE_RUNNING;
-
WINE_TRACE("%u\n", code);
switch (code)
case SERVICE_CONTROL_STOP:
UpdateSCMStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);
KillService();
- state = SERVICE_STOPPED;
break;
default:
fprintf(stderr, "Unhandled service control code: %u\n", code);
+ UpdateSCMStatus(SERVICE_RUNNING, NO_ERROR, 0);
break;
}
-
- UpdateSCMStatus(state, NO_ERROR, 0);
}
static DWORD WINAPI ServiceExecutionThread(LPVOID param)
}
UpdateSCMStatus(SERVICE_RUNNING, NO_ERROR, 0);
-
- WaitForSingleObject(kill_event, INFINITE);
- KillService();
-
+ WaitForSingleObject(thread, INFINITE);
UpdateSCMStatus(SERVICE_STOPPED, NO_ERROR, 0);
}