X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=service.cpp;h=30a75d3d4cccf06003cf175b23f01e561133a336;hb=f113d025a47ea5a3dd0cb962b5913045ac811b71;hp=ea4b633ef290e35071cc30e6dc1b68801e3c4630;hpb=135329c0790e6d33f658727be3e5439a167a7da8;p=nssm.git diff --git a/service.cpp b/service.cpp index ea4b633..30a75d3 100644 --- a/service.cpp +++ b/service.cpp @@ -449,11 +449,15 @@ int start_service(nssm_service_t *service) { flags |= CREATE_UNICODE_ENVIRONMENT; #endif if (! CreateProcess(0, cmd, 0, 0, inherit_handles, flags, service->env, service->dir, &si, &pi)) { + unsigned long exitcode = 3; unsigned long error = GetLastError(); - if (error == ERROR_INVALID_PARAMETER && service->env) log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_CREATEPROCESS_FAILED_INVALID_ENVIRONMENT, service->name, service->exe, NSSM_REG_ENV, 0); + if (error == ERROR_INVALID_PARAMETER && service->env) { + log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_CREATEPROCESS_FAILED_INVALID_ENVIRONMENT, service->name, service->exe, NSSM_REG_ENV, 0); + if (test_environment(service->env)) exitcode = 4; + } else log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_CREATEPROCESS_FAILED, service->name, service->exe, error_string(error), 0); close_output_handles(&si); - return stop_service(service, 3, true, true); + return stop_service(service, exitcode, true, true); } service->process_handle = pi.hProcess; service->pid = pi.dwProcessId;