Selaa lähdekoodia

Allow waiting for debugger.

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.
Iain Patterson 9 vuotta sitten
vanhempi
sitoutus
adda6b2aaf
1 muutettua tiedostoa jossa 3 lisäystä ja 0 poistoa
  1. 3 0
      service.cpp

+ 3 - 0
service.cpp

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