X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=nssm.cpp;h=9c51c53d43c1c7b74d455aa70aa699c410fb6f4f;hb=refs%2Fheads%2Fmaster;hp=d70c6b475ec1c0dab0cebb5f75520ea509abe56d;hpb=b3b29f0b27046a282e688c494def532252ad21c3;p=nssm.git diff --git a/nssm.cpp b/nssm.cpp index d70c6b4..9c51c53 100644 --- a/nssm.cpp +++ b/nssm.cpp @@ -32,6 +32,21 @@ int str_number(const TCHAR *string, unsigned long *number, TCHAR **bogus) { return 0; } +/* User requested us to print our version. */ +static bool is_version(const TCHAR *s) { + if (! s || ! *s) return false; + /* /version */ + if (*s == '/') s++; + else if (*s == '-') { + /* -v, -V, -version, --version */ + s++; + if (*s == '-') s++; + else if (str_equiv(s, _T("v"))) return true; + } + if (str_equiv(s, _T("version"))) return true; + return false; +} + int str_number(const TCHAR *string, unsigned long *number) { TCHAR *bogus; return str_number(string, number, &bogus); @@ -158,8 +173,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); } @@ -208,7 +223,7 @@ static int elevate(int argc, TCHAR **argv, unsigned long message) { int num_cpus() { DWORD_PTR i, affinity, system_affinity; if (! GetProcessAffinityMask(GetCurrentProcess(), &affinity, &system_affinity)) return 64; - for (i = 0; system_affinity & (1LL << i); i++); + for (i = 0; system_affinity & (1LL << i); i++) if (i == 64) break; return (int) i; } @@ -245,7 +260,12 @@ int _tmain(int argc, TCHAR **argv) { /* Valid commands are: start, stop, pause, continue, install, edit, get, set, reset, unset, remove + status, statuscode, rotate, list, processes, version */ + if (is_version(argv[1])) { + _tprintf(_T("%s %s %s %s\n"), NSSM, NSSM_VERSION, NSSM_CONFIGURATION, NSSM_DATE); + nssm_exit(0); + } if (str_equiv(argv[1], _T("start"))) nssm_exit(control_service(NSSM_SERVICE_CONTROL_START, argc - 2, argv + 2)); if (str_equiv(argv[1], _T("stop"))) nssm_exit(control_service(SERVICE_CONTROL_STOP, argc - 2, argv + 2)); if (str_equiv(argv[1], _T("restart"))) { @@ -256,6 +276,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));