Restart in response to PBT_APMRESUMEAUTOMATIC event.
authorIain Patterson <me@iain.cx>
Wed, 7 May 2014 07:33:35 +0000 (08:33 +0100)
committerIain Patterson <me@iain.cx>
Wed, 10 Sep 2014 22:03:21 +0000 (23:03 +0100)
service.cpp

index 61d4b84..3d3acb9 100644 (file)
@@ -1362,7 +1362,7 @@ void WINAPI service_main(unsigned long argc, TCHAR **argv) {
   /* Initialise status */\r
   ZeroMemory(&service->status, sizeof(service->status));\r
   service->status.dwServiceType = SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS;\r
-  service->status.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE;\r
+  service->status.dwControlsAccepted = SERVICE_ACCEPT_POWEREVENT | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE;\r
   service->status.dwWin32ExitCode = NO_ERROR;\r
   service->status.dwServiceSpecificExitCode = 0;\r
   service->status.dwCheckPoint = 0;\r
@@ -1460,6 +1460,7 @@ TCHAR *service_control_text(unsigned long control) {
     case SERVICE_CONTROL_CONTINUE: return _T("CONTINUE");\r
     case SERVICE_CONTROL_INTERROGATE: return _T("INTERROGATE");\r
     case NSSM_SERVICE_CONTROL_ROTATE: return _T("ROTATE");\r
+    case SERVICE_CONTROL_POWEREVENT: return _T("POWEREVENT");\r
     default: return 0;\r
   }\r
 }\r
@@ -1567,6 +1568,15 @@ unsigned long WINAPI service_control_handler(unsigned long control, unsigned lon
       if (service->rotate_stdout_online == NSSM_ROTATE_ONLINE) service->rotate_stdout_online = NSSM_ROTATE_ONLINE_ASAP;\r
       if (service->rotate_stderr_online == NSSM_ROTATE_ONLINE) service->rotate_stderr_online = NSSM_ROTATE_ONLINE_ASAP;\r
       return NO_ERROR;\r
+\r
+    case SERVICE_CONTROL_POWEREVENT:\r
+      if (event != PBT_APMRESUMEAUTOMATIC) {\r
+        log_service_control(service->name, control, false);\r
+        return NO_ERROR;\r
+      }\r
+      log_service_control(service->name, control, true);\r
+      end_service((void *) service, false);\r
+      return NO_ERROR;\r
   }\r
 \r
   /* Unknown control */\r