X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=nssm.cpp;h=6147b90c99689fb62cfac93d469f10801a8826d2;hb=95640f304295257c6d1bb18c806f9d1feb714d61;hp=9fde560f32b1054e4865a81bec552f35ce4f2f00;hpb=800ca0c4f150de75c38c87a59d18878b0341f16b;p=nssm.git diff --git a/nssm.cpp b/nssm.cpp index 9fde560..6147b90 100644 --- a/nssm.cpp +++ b/nssm.cpp @@ -9,6 +9,7 @@ static TCHAR imagepath[PATH_LENGTH]; static TCHAR imageargv0[PATH_LENGTH]; void nssm_exit(int status) { + free_imports(); unsetup_utf8(); exit(status); } @@ -157,8 +158,8 @@ void strip_basename(TCHAR *buffer) { /* How to use me correctly */ int usage(int ret) { - if (GetConsoleWindow()) print_message(stderr, NSSM_MESSAGE_USAGE, NSSM_VERSION, NSSM_CONFIGURATION, NSSM_DATE); - else popup_message(0, MB_OK, NSSM_MESSAGE_USAGE, NSSM_VERSION, NSSM_CONFIGURATION, NSSM_DATE); + if ((! GetConsoleWindow() || ! GetStdHandle(STD_OUTPUT_HANDLE)) && GetProcessWindowStation()) popup_message(0, MB_OK, NSSM_MESSAGE_USAGE, NSSM_VERSION, NSSM_CONFIGURATION, NSSM_DATE); + else print_message(stderr, NSSM_MESSAGE_USAGE, NSSM_VERSION, NSSM_CONFIGURATION, NSSM_DATE); return(ret); } @@ -255,6 +256,7 @@ int _tmain(int argc, TCHAR **argv) { if (str_equiv(argv[1], _T("pause"))) nssm_exit(control_service(SERVICE_CONTROL_PAUSE, argc - 2, argv + 2)); if (str_equiv(argv[1], _T("continue"))) nssm_exit(control_service(SERVICE_CONTROL_CONTINUE, argc - 2, argv + 2)); if (str_equiv(argv[1], _T("status"))) nssm_exit(control_service(SERVICE_CONTROL_INTERROGATE, argc - 2, argv + 2)); + if (str_equiv(argv[1], _T("statuscode"))) nssm_exit(control_service(SERVICE_CONTROL_INTERROGATE, argc - 2, argv + 2, true)); if (str_equiv(argv[1], _T("rotate"))) nssm_exit(control_service(NSSM_SERVICE_CONTROL_ROTATE, argc - 2, argv + 2)); if (str_equiv(argv[1], _T("install"))) { if (! is_admin) nssm_exit(elevate(argc, argv, NSSM_MESSAGE_NOT_ADMINISTRATOR_CANNOT_INSTALL)); @@ -300,7 +302,6 @@ int _tmain(int argc, TCHAR **argv) { /* User probably ran nssm with no argument */ if (error == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) nssm_exit(usage(1)); log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_DISPATCHER_FAILED, error_string(error), 0); - free_imports(); nssm_exit(100); } }