More CreateProcess() fun.
authorIain Patterson <me@iain.cx>
Mon, 3 Oct 2011 20:53:26 +0000 (21:53 +0100)
committerIain Patterson <me@iain.cx>
Tue, 11 Oct 2011 10:05:21 +0000 (11:05 +0100)
Correctly handle the case where the application executable is under
a path which contains space and an executable sharing the initial
part of that path (up to a space) exists.

A (contrived) example is when Application is

  C:\stuff\app lications\foo.exe

and C:\stuff\app.exe also exists.

Thanks Eugene Lifshitz.

ChangeLog.txt
README.txt
service.cpp

index 09d625e..b5ac32c 100644 (file)
@@ -1,3 +1,11 @@
+Changes since 2.9
+-----------------
+  * Fixed edge case with CreateProcess().
+
+    Correctly handle the case where the application executable is under
+    a path which contains space and an executable sharing the initial
+    part of that path (up to a space) exists.
+
 Changes since 2.8
 -----------------
   * Fixed failure to run on Windows versions prior to Vista.
index 006b739..d609015 100644 (file)
@@ -178,6 +178,7 @@ Thanks to Arve Knudsen for spotting that child processes of the monitored
 application could be left running on service shutdown, and that a missing\r
 registry value for AppDirectory confused NSSM.\r
 Thanks to Peter Wagemans and Laszlo Keresztfalvi for suggesting throttling restarts.\r
+Thanks to Eugene Lifshitz for finding an edge case in CreateProcess().\r
 \r
 Licence\r
 -------\r
index 60a8db0..4011484 100644 (file)
@@ -308,7 +308,7 @@ int start_service() {
 \r
   /* Launch executable with arguments */\r
   char cmd[CMD_LENGTH];\r
-  if (_snprintf(cmd, sizeof(cmd), "%s %s", exe, flags) < 0) {\r
+  if (_snprintf(cmd, sizeof(cmd), "\"%s\" %s", exe, flags) < 0) {\r
     log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, "command line", "start_service", 0);\r
     return stop_service(2, true, true);\r
   }\r