From 955de31fad16da6453d0a67d2510955cb255ab46 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Wed, 11 Dec 2013 17:16:07 +0900 Subject: [PATCH] msiexec: MSI service should report SERVICE_STOPPED when appropriate. --- programs/msiexec/service.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/programs/msiexec/service.c b/programs/msiexec/service.c index 4b72fe0812e..fdd29bd2293 100644 --- a/programs/msiexec/service.c +++ b/programs/msiexec/service.c @@ -81,6 +81,8 @@ static BOOL UpdateSCMStatus(DWORD dwCurrentState, DWORD dwWin32ExitCode, static void WINAPI ServiceCtrlHandler(DWORD code) { + DWORD state = SERVICE_RUNNING; + WINE_TRACE("%d\n", code); switch (code) @@ -89,13 +91,14 @@ static void WINAPI ServiceCtrlHandler(DWORD code) case SERVICE_CONTROL_STOP: UpdateSCMStatus(SERVICE_STOP_PENDING, NO_ERROR, 0); KillService(); + state = SERVICE_STOPPED; return; default: fprintf(stderr, "Unhandled service control code: %d\n", code); break; } - UpdateSCMStatus(SERVICE_RUNNING, NO_ERROR, 0); + UpdateSCMStatus(state, NO_ERROR, 0); } 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"); KillService(); + UpdateSCMStatus(SERVICE_STOPPED, NO_ERROR, 0); return; } if (!StartServiceThread()) { KillService(); + UpdateSCMStatus(SERVICE_STOPPED, NO_ERROR, 0); return; } @@ -148,6 +153,8 @@ static void WINAPI ServiceMain(DWORD argc, LPSTR *argv) WaitForSingleObject(kill_event, INFINITE); KillService(); + + UpdateSCMStatus(SERVICE_STOPPED, NO_ERROR, 0); } DWORD DoService(void)