Allocate new console by default.
[nssm.git] / io.cpp
diff --git a/io.cpp b/io.cpp
index 42e4447..41139a0 100644 (file)
--- a/io.cpp
+++ b/io.cpp
@@ -231,7 +231,26 @@ void rotate_file(TCHAR *service_name, TCHAR *path, unsigned long seconds, unsign
 }\r
 \r
 int get_output_handles(nssm_service_t *service, HKEY key, STARTUPINFO *si) {\r
-  bool redirect = false;\r
+  /* Allocate a new console so we get a fresh stdin, stdout and stderr. */\r
+  if (si && ! service->no_console) {\r
+    FreeConsole();\r
+    AllocConsole();\r
+    banner();\r
+\r
+    /* Set a title like "[NSSM] Jenkins" */\r
+    TCHAR displayname[SERVICE_NAME_LENGTH];\r
+    unsigned long len = _countof(displayname);\r
+    SC_HANDLE services = open_service_manager();\r
+    if (services) {\r
+      if (! GetServiceDisplayName(services, service->name, displayname, &len)) ZeroMemory(displayname, sizeof(displayname));\r
+      CloseServiceHandle(services);\r
+    }\r
+    if (! displayname[0]) _sntprintf_s(displayname, _countof(displayname), _TRUNCATE, _T("%s"), service->name);\r
+\r
+    TCHAR title[65535];\r
+    _sntprintf_s(title, _countof(title), _TRUNCATE, _T("[%s] %s"), NSSM, displayname);\r
+    SetConsoleTitle(title);\r
+  }\r
 \r
   /* stdin */\r
   if (get_createfile_parameters(key, NSSM_REG_STDIN, service->stdin_path, &service->stdin_sharing, NSSM_STDIN_SHARING, &service->stdin_disposition, NSSM_STDIN_DISPOSITION, &service->stdin_flags, NSSM_STDIN_FLAGS)) {\r
@@ -245,8 +264,6 @@ int get_output_handles(nssm_service_t *service, HKEY key, STARTUPINFO *si) {
       log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_CREATEFILE_FAILED, service->stdin_path, error_string(GetLastError()), 0);\r
       return 2;\r
     }\r
-\r
-    redirect = true;\r
   }\r
 \r
   /* stdout */\r
@@ -277,8 +294,6 @@ int get_output_handles(nssm_service_t *service, HKEY key, STARTUPINFO *si) {
       }\r
       service->rotate_stdout_online = NSSM_ROTATE_OFFLINE;\r
     }\r
-\r
-    redirect = true;\r
   }\r
 \r
   /* stderr */\r
@@ -325,35 +340,18 @@ int get_output_handles(nssm_service_t *service, HKEY key, STARTUPINFO *si) {
         }\r
         service->rotate_stderr_online = NSSM_ROTATE_OFFLINE;\r
       }\r
-\r
-      redirect = true;\r
     }\r
   }\r
 \r
-  if (! redirect || ! si) return 0;\r
-\r
-  /* Allocate a new console so we get a fresh stdin, stdout and stderr. */\r
-  FreeConsole();\r
-  AllocConsole();\r
-\r
-  /* Set a title like "[NSSM] Jenkins" */\r
-  TCHAR displayname[SERVICE_NAME_LENGTH];\r
-  unsigned long len = _countof(displayname);\r
-  SC_HANDLE services = open_service_manager();\r
-  if (services) {\r
-    if (! GetServiceDisplayName(services, service->name, displayname, &len)) _sntprintf_s(displayname, _countof(displayname), _TRUNCATE, _T("%s"), service->name);\r
-    CloseServiceHandle(services);\r
-  }\r
-\r
-  TCHAR title[65535];\r
-  _sntprintf_s(title, _countof(title), _TRUNCATE, _T("[%s] %s\n"), NSSM, displayname);\r
-  SetConsoleTitle(title);\r
+  if (! si) return 0;\r
 \r
   /*\r
     We need to set the startup_info flags to make the new handles\r
     inheritable by the new process.\r
   */\r
-  if (si) si->dwFlags |= STARTF_USESTDHANDLES;\r
+  si->dwFlags |= STARTF_USESTDHANDLES;\r
+\r
+  if (service->no_console) return 0;\r
 \r
   /* Redirect other handles. */\r
   if (! si->hStdInput) {\r