Allow waiting for debugger.
authorIain Patterson <me@iain.cx>
Mon, 25 Jul 2016 13:47:32 +0000 (14:47 +0100)
committerIain Patterson <me@iain.cx>
Thu, 28 Jul 2016 15:44:37 +0000 (16:44 +0100)
If the service is started with the single argument "debug" eg by setting
the Start parameters of the service in services.msc, we delayed startup
in service_main() until the await_debugger variable is set to false.

Attach to nssm.exe with your debugger of choice, set a breakpoint within
that function and poke the variable when ready.

Beware that the behaviour of the service manager when service_main
doesn't complete operation promptly is undefined.

service.cpp

index 849f790..88c1820 100644 (file)
@@ -1503,6 +1503,9 @@ void WINAPI service_main(unsigned long argc, TCHAR **argv) {
   nssm_service_t *service = alloc_nssm_service();\r
   if (! service) return;\r
 \r
+  static volatile bool await_debugger = (argc > 1 && str_equiv(argv[1], _T("debug")));\r
+  while (await_debugger) Sleep(1000);\r
+\r
   if (_sntprintf_s(service->name, _countof(service->name), _TRUNCATE, _T("%s"), argv[0]) < 0) {\r
     log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, _T("service->name"), _T("service_main()"), 0);\r
     return;\r