if (service->stderr_copy_and_truncate) set_createfile_parameter(key, NSSM_REG_STDERR, NSSM_REG_STDIO_COPY_AND_TRUNCATE, 1);\r
else if (editing) delete_createfile_parameter(key, NSSM_REG_STDERR, NSSM_REG_STDIO_COPY_AND_TRUNCATE);\r
}\r
+ if (service->hook_share_output_handles) set_number(key, NSSM_REG_HOOK_SHARE_OUTPUT_HANDLES, 1);\r
+ else if (editing) RegDeleteValue(key, NSSM_REG_HOOK_SHARE_OUTPUT_HANDLES);\r
if (service->rotate_files) set_number(key, NSSM_REG_ROTATE, 1);\r
else if (editing) RegDeleteValue(key, NSSM_REG_ROTATE);\r
if (service->rotate_stdout_online) set_number(key, NSSM_REG_ROTATE_ONLINE, 1);\r
\r
int set_string(HKEY key, TCHAR *value, TCHAR *string) {\r
return set_string(key, value, string, false);\r
- return 1;\r
}\r
\r
int set_expand_string(HKEY key, TCHAR *value, TCHAR *string) {\r
return set_string(key, value, string, true);\r
- return 1;\r
}\r
\r
/*\r
\r
HKEY open_registry(const TCHAR *service_name, const TCHAR *sub, REGSAM sam, bool must_exist) {\r
HKEY key;\r
- long error = open_registry(service_name, sub, sam, &key, true);\r
+ long error = open_registry(service_name, sub, sam, &key, must_exist);\r
return key;\r
}\r
\r
else log_event(EVENTLOG_WARNING_TYPE, NSSM_EVENT_BOGUS_PRIORITY, service->name, NSSM_REG_PRIORITY, 0);\r
}\r
\r
+ /* Try to get hook I/O sharing - may fail. */\r
+ unsigned long hook_share_output_handles;\r
+ if (get_number(key, NSSM_REG_HOOK_SHARE_OUTPUT_HANDLES, &hook_share_output_handles, false) == 1) {\r
+ if (hook_share_output_handles) service->hook_share_output_handles = true;\r
+ else service->hook_share_output_handles = false;\r
+ }\r
+ else hook_share_output_handles = false;\r
/* Try to get file rotation settings - may fail. */\r
unsigned long rotate_files;\r
if (get_number(key, NSSM_REG_ROTATE, &rotate_files, false) == 1) {\r
else service->rotate_stdout_online = service->rotate_stderr_online = false;\r
}\r
else service->rotate_stdout_online = service->rotate_stderr_online = false;\r
+ /* Hook I/O sharing and online rotation need a pipe. */\r
+ service->use_stdout_pipe = service->rotate_stdout_online || hook_share_output_handles;\r
+ service->use_stderr_pipe = service->rotate_stderr_online || hook_share_output_handles;\r
if (get_number(key, NSSM_REG_ROTATE_SECONDS, &service->rotate_seconds, false) != 1) service->rotate_seconds = 0;\r
if (get_number(key, NSSM_REG_ROTATE_BYTES_LOW, &service->rotate_bytes_low, false) != 1) service->rotate_bytes_low = 0;\r
if (get_number(key, NSSM_REG_ROTATE_BYTES_HIGH, &service->rotate_bytes_high, false) != 1) service->rotate_bytes_high = 0;\r