浏览代码

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 7 年之前
父节点
当前提交
adda6b2aaf
共有 1 个文件被更改,包括 3 次插入0 次删除
  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;