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];
/* 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);
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;
/* 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;
}
/* Restore our environment. */
- duplicate_environment_strings(service->initial_env);
+ unset_service_environment(service);
LeaveCriticalSection(&service->hook_section);