Преглед на файлове

Don't get stuck in SERVICE_CONTINUE_PENDING.

If we received SERVICE_CONTROL_CONTINUE and the service wasn't paused we
would incorrectly set SERVICE_CONTINUE_PENDING status.

The Windows services console won't allow a user to attempt to send a
continue control to a running service but other applications, like say
NSSM itself, might happily try, then get confused when the status wasn't
set to SERVICE_RUNNING.
Iain Patterson преди 12 години
родител
ревизия
e00dcf2fb5
променени са 1 файла, в които са добавени 2 реда и са изтрити 1 реда
  1. 2 1
      service.cpp

+ 2 - 1
service.cpp

@@ -1456,7 +1456,8 @@ unsigned long WINAPI service_control_handler(unsigned long control, unsigned lon
         ZeroMemory(&service->throttle_duetime, sizeof(service->throttle_duetime));
         SetWaitableTimer(service->throttle_timer, &service->throttle_duetime, 0, 0, 0, 0);
       }
-      service->status.dwCurrentState = SERVICE_CONTINUE_PENDING;
+      /* We can't continue if the application is running! */
+      if (! service->process_handle) service->status.dwCurrentState = SERVICE_CONTINUE_PENDING;
       service->status.dwWaitHint = throttle_milliseconds(service->throttle) + NSSM_WAITHINT_MARGIN;
       log_event(EVENTLOG_INFORMATION_TYPE, NSSM_EVENT_RESET_THROTTLE, service->name, 0);
       SetServiceStatus(service->status_handle, &service->status);