Added nssm_exe().
[nssm.git] / registry.cpp
index 258b96a..d20b2c2 100644 (file)
@@ -158,6 +158,8 @@ int create_parameters(nssm_service_t *service, bool editing) {
     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
@@ -638,6 +640,13 @@ int get_parameters(nssm_service_t *service, STARTUPINFO *si) {
     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
@@ -650,6 +659,9 @@ int get_parameters(nssm_service_t *service, STARTUPINFO *si) {
     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