msiexec: MSI service should report SERVICE_STOPPED when appropriate.

This commit is contained in:
Dmitry Timoshkov 2013-12-11 17:16:07 +09:00 committed by Alexandre Julliard
parent 957f7013d2
commit 955de31fad

View file

@ -81,6 +81,8 @@ static BOOL UpdateSCMStatus(DWORD dwCurrentState, DWORD dwWin32ExitCode,
static void WINAPI ServiceCtrlHandler(DWORD code) static void WINAPI ServiceCtrlHandler(DWORD code)
{ {
DWORD state = SERVICE_RUNNING;
WINE_TRACE("%d\n", code); WINE_TRACE("%d\n", code);
switch (code) switch (code)
@ -89,13 +91,14 @@ static void WINAPI ServiceCtrlHandler(DWORD code)
case SERVICE_CONTROL_STOP: case SERVICE_CONTROL_STOP:
UpdateSCMStatus(SERVICE_STOP_PENDING, NO_ERROR, 0); UpdateSCMStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);
KillService(); KillService();
state = SERVICE_STOPPED;
return; return;
default: default:
fprintf(stderr, "Unhandled service control code: %d\n", code); fprintf(stderr, "Unhandled service control code: %d\n", code);
break; break;
} }
UpdateSCMStatus(SERVICE_RUNNING, NO_ERROR, 0); UpdateSCMStatus(state, NO_ERROR, 0);
} }
static DWORD WINAPI ServiceExecutionThread(LPVOID param) static DWORD WINAPI ServiceExecutionThread(LPVOID param)
@ -135,12 +138,14 @@ static void WINAPI ServiceMain(DWORD argc, LPSTR *argv)
{ {
fprintf(stderr, "Failed to create event\n"); fprintf(stderr, "Failed to create event\n");
KillService(); KillService();
UpdateSCMStatus(SERVICE_STOPPED, NO_ERROR, 0);
return; return;
} }
if (!StartServiceThread()) if (!StartServiceThread())
{ {
KillService(); KillService();
UpdateSCMStatus(SERVICE_STOPPED, NO_ERROR, 0);
return; return;
} }
@ -148,6 +153,8 @@ static void WINAPI ServiceMain(DWORD argc, LPSTR *argv)
WaitForSingleObject(kill_event, INFINITE); WaitForSingleObject(kill_event, INFINITE);
KillService(); KillService();
UpdateSCMStatus(SERVICE_STOPPED, NO_ERROR, 0);
} }
DWORD DoService(void) DWORD DoService(void)