Module: wine Branch: master Commit: 955de31fad16da6453d0a67d2510955cb255ab46 URL: http://source.winehq.org/git/wine.git/?a=commit;h=955de31fad16da6453d0a67d25...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Wed Dec 11 17:16:07 2013 +0900
msiexec: MSI service should report SERVICE_STOPPED when appropriate.
---
programs/msiexec/service.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/programs/msiexec/service.c b/programs/msiexec/service.c index 4b72fe0..fdd29bd 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)