X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=hook.cpp;h=780590bcaea56d0240ba217d421aa1e366f14331;hb=fb96938cf944edf3bc0dfd99dbff416b0397df4f;hp=17204ae5a22a8f796fd87ef3da4b54b59ac5a11e;hpb=2f2f64b07611fe0709bf4d502de7cac292dc1975;p=nssm.git diff --git a/hook.cpp b/hook.cpp index 17204ae..780590b 100644 --- a/hook.cpp +++ b/hook.cpp @@ -234,8 +234,7 @@ int nssm_hook(hook_thread_t *hook_threads, nssm_service_t *service, TCHAR *hook_ EnterCriticalSection(&service->hook_section); /* Set the environment. */ - if (service->env) duplicate_environment(service->env); - if (service->env_extra) set_environment_block(service->env_extra); + set_service_environment(service); /* ABI version. */ TCHAR number[16]; @@ -255,10 +254,8 @@ int nssm_hook(hook_thread_t *hook_threads, nssm_service_t *service, TCHAR *hook_ /* Last control handled. */ SetEnvironmentVariable(NSSM_HOOK_ENV_LAST_CONTROL, service_control_text(service->last_control)); - /* Path to NSSM. */ - TCHAR path[PATH_LENGTH]; - GetModuleFileName(0, path, _countof(path)); - SetEnvironmentVariable(NSSM_HOOK_ENV_IMAGE_PATH, path); + /* Path to NSSM, unquoted for the environment. */ + SetEnvironmentVariable(NSSM_HOOK_ENV_IMAGE_PATH, nssm_unquoted_imagepath()); /* NSSM version. */ SetEnvironmentVariable(NSSM_HOOK_ENV_NSSM_CONFIGURATION, NSSM_CONFIGURATION); @@ -327,7 +324,7 @@ int nssm_hook(hook_thread_t *hook_threads, nssm_service_t *service, TCHAR *hook_ TCHAR cmd[CMD_LENGTH]; if (get_hook(service->name, hook_event, hook_action, cmd, sizeof(cmd))) { log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_GET_HOOK_FAILED, hook_event, hook_action, service->name, 0); - duplicate_environment_strings(service->initial_env); + unset_service_environment(service); LeaveCriticalSection(&service->hook_section); HeapFree(GetProcessHeap(), 0, hook); return NSSM_HOOK_STATUS_ERROR; @@ -335,7 +332,7 @@ int nssm_hook(hook_thread_t *hook_threads, nssm_service_t *service, TCHAR *hook_ /* No hook. */ if (! _tcslen(cmd)) { - duplicate_environment_strings(service->initial_env); + unset_service_environment(service); LeaveCriticalSection(&service->hook_section); HeapFree(GetProcessHeap(), 0, hook); return NSSM_HOOK_STATUS_NOTFOUND; @@ -389,7 +386,7 @@ int nssm_hook(hook_thread_t *hook_threads, nssm_service_t *service, TCHAR *hook_ } /* Restore our environment. */ - duplicate_environment_strings(service->initial_env); + unset_service_environment(service); LeaveCriticalSection(&service->hook_section);