X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=service.cpp;h=2d20ff30b5017fbbe1441c23d596af7572d64341;hb=800ca0c4f150de75c38c87a59d18878b0341f16b;hp=849f79093573d4ffa383c8eb9acf9e75f058fed7;hpb=586ea54f696a562ed3837b6b55e3fa1bbe1b2b22;p=nssm.git diff --git a/service.cpp b/service.cpp index 849f790..2d20ff3 100644 --- a/service.cpp +++ b/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; @@ -2075,7 +2078,7 @@ void CALLBACK end_service(void *arg, unsigned char why) { stop_service(service, exitcode, false, default_action); wait_for_hooks(service, false); free_imports(); - exit(exitcode); + nssm_exit(exitcode); } } @@ -2209,7 +2212,9 @@ awaited: return ret; } -int list_nssm_services() { +int list_nssm_services(int argc, TCHAR **argv) { + bool including_native = (argc > 0 && str_equiv(argv[0], _T("all"))); + /* Open service manager. */ SC_HANDLE services = open_service_manager(SC_MANAGER_CONNECT | SC_MANAGER_ENUMERATE_SERVICE); if (! services) { @@ -2256,7 +2261,7 @@ int list_nssm_services() { get_parameters(service, 0); /* We manage the service if we have an Application. */ - if (service->exe[0]) _tprintf(_T("%s\n"), service->name); + if (including_native || service->exe[0]) _tprintf(_T("%s\n"), service->name); cleanup_nssm_service(service); }