Fixed bug when installing from the command line.
authorIain Patterson <me@iain.cx>
Sat, 23 Nov 2013 15:43:59 +0000 (15:43 +0000)
committerIain Patterson <me@iain.cx>
Sat, 23 Nov 2013 15:43:59 +0000 (15:43 +0000)
We forgot to set default values when installing from the command line.
Installing from the GUI worked.

Thanks Paul Spause.

ChangeLog.txt
README.txt
gui.cpp
service.cpp
service.h

index e7cff08..08188a6 100644 (file)
@@ -1,3 +1,9 @@
+Changes since 2.19
+-----------------
+  * Services installed from the commandline without using the
+    GUI no longer have incorrect AppStopMethod* registry
+    entries set.
+
 Changes since 2.18
 -----------------
   * Support AppEnvironmentExtra to append to the environment
 Changes since 2.18
 -----------------
   * Support AppEnvironmentExtra to append to the environment
index bc18637..f218e83 100644 (file)
@@ -323,6 +323,7 @@ Thanks to Eric Cheldelin for the inspiration to generate a Control-C event
 on shutdown.\r
 Thanks to Brian Baxter for suggesting how to escape quotes from the command prompt.\r
 Thanks to Russ Holmann for suggesting that the shutdown timeout be configurable.\r
 on shutdown.\r
 Thanks to Brian Baxter for suggesting how to escape quotes from the command prompt.\r
 Thanks to Russ Holmann for suggesting that the shutdown timeout be configurable.\r
+Thanks to Paul Spause for spotting a bug with default registry entries.\r
 \r
 Licence\r
 -------\r
 \r
 Licence\r
 -------\r
diff --git a/gui.cpp b/gui.cpp
index 7cc5bc4..ca21ace 100644 (file)
--- a/gui.cpp
+++ b/gui.cpp
@@ -87,6 +87,8 @@ int install(HWND window) {
 \r
   nssm_service_t *service = alloc_nssm_service();\r
   if (service) {\r
 \r
   nssm_service_t *service = alloc_nssm_service();\r
   if (service) {\r
+    set_nssm_service_defaults(service);\r
+\r
     /* Get service name. */\r
     if (! GetDlgItemText(window, IDC_NAME, service->name, sizeof(service->name))) {\r
       popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_MISSING_SERVICE_NAME);\r
     /* Get service name. */\r
     if (! GetDlgItemText(window, IDC_NAME, service->name, sizeof(service->name))) {\r
       popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_MISSING_SERVICE_NAME);\r
@@ -115,7 +117,6 @@ int install(HWND window) {
     }\r
 \r
     /* Get stop method stuff. */\r
     }\r
 \r
     /* Get stop method stuff. */\r
-    service->stop_method = ~0;\r
     check_stop_method(service, NSSM_STOP_METHOD_CONSOLE, IDC_METHOD_CONSOLE);\r
     check_stop_method(service, NSSM_STOP_METHOD_WINDOW, IDC_METHOD_WINDOW);\r
     check_stop_method(service, NSSM_STOP_METHOD_THREADS, IDC_METHOD_THREADS);\r
     check_stop_method(service, NSSM_STOP_METHOD_CONSOLE, IDC_METHOD_CONSOLE);\r
     check_stop_method(service, NSSM_STOP_METHOD_WINDOW, IDC_METHOD_WINDOW);\r
     check_stop_method(service, NSSM_STOP_METHOD_THREADS, IDC_METHOD_THREADS);\r
@@ -134,16 +135,6 @@ int install(HWND window) {
     check_io("stdin", service->stdin_path, sizeof(service->stdin_path), IDC_STDIN);\r
     check_io("stdout", service->stdout_path, sizeof(service->stdout_path), IDC_STDOUT);\r
     check_io("stderr", service->stderr_path, sizeof(service->stderr_path), IDC_STDERR);\r
     check_io("stdin", service->stdin_path, sizeof(service->stdin_path), IDC_STDIN);\r
     check_io("stdout", service->stdout_path, sizeof(service->stdout_path), IDC_STDOUT);\r
     check_io("stderr", service->stderr_path, sizeof(service->stderr_path), IDC_STDERR);\r
-    /* I/O defaults. */\r
-    service->stdin_sharing = NSSM_STDIN_SHARING;\r
-    service->stdin_disposition = NSSM_STDIN_DISPOSITION;\r
-    service->stdin_flags = NSSM_STDIN_FLAGS;\r
-    service->stdout_sharing = NSSM_STDOUT_SHARING;\r
-    service->stdout_disposition = NSSM_STDOUT_DISPOSITION;\r
-    service->stdout_flags = NSSM_STDOUT_FLAGS;\r
-    service->stderr_sharing = NSSM_STDERR_SHARING;\r
-    service->stderr_disposition = NSSM_STDERR_DISPOSITION;\r
-    service->stderr_flags = NSSM_STDERR_FLAGS;\r
     /* Override stdout and/or stderr. */\r
     if (SendDlgItemMessage(tablist[NSSM_TAB_IO], IDC_TRUNCATE, BM_GETCHECK, 0, 0) & BST_CHECKED) {\r
       if (service->stdout_path[0]) service->stdout_disposition = CREATE_ALWAYS;\r
     /* Override stdout and/or stderr. */\r
     if (SendDlgItemMessage(tablist[NSSM_TAB_IO], IDC_TRUNCATE, BM_GETCHECK, 0, 0) & BST_CHECKED) {\r
       if (service->stdout_path[0]) service->stdout_disposition = CREATE_ALWAYS;\r
index 077c1e8..0a95ccf 100644 (file)
@@ -32,6 +32,26 @@ SC_HANDLE open_service_manager() {
   return ret;\r
 }\r
 \r
   return ret;\r
 }\r
 \r
+/* Set default values which aren't zero. */\r
+void set_nssm_service_defaults(nssm_service_t *service) {\r
+  if (! service) return;\r
+\r
+  service->stdin_sharing = NSSM_STDIN_SHARING;\r
+  service->stdin_disposition = NSSM_STDIN_DISPOSITION;\r
+  service->stdin_flags = NSSM_STDIN_FLAGS;\r
+  service->stdout_sharing = NSSM_STDOUT_SHARING;\r
+  service->stdout_disposition = NSSM_STDOUT_DISPOSITION;\r
+  service->stdout_flags = NSSM_STDOUT_FLAGS;\r
+  service->stderr_sharing = NSSM_STDERR_SHARING;\r
+  service->stderr_disposition = NSSM_STDERR_DISPOSITION;\r
+  service->stderr_flags = NSSM_STDERR_FLAGS;\r
+  service->throttle_delay = NSSM_RESET_THROTTLE_RESTART;\r
+  service->stop_method = ~0;\r
+  service->kill_console_delay = NSSM_KILL_CONSOLE_GRACE_PERIOD;\r
+  service->kill_window_delay = NSSM_KILL_WINDOW_GRACE_PERIOD;\r
+  service->kill_threads_delay = NSSM_KILL_THREADS_GRACE_PERIOD;\r
+}\r
+\r
 /* Allocate and zero memory for a service. */\r
 nssm_service_t *alloc_nssm_service() {\r
   nssm_service_t *service = (nssm_service_t *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(nssm_service_t));\r
 /* Allocate and zero memory for a service. */\r
 nssm_service_t *alloc_nssm_service() {\r
   nssm_service_t *service = (nssm_service_t *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(nssm_service_t));\r
@@ -63,6 +83,7 @@ int pre_install_service(int argc, char **argv) {
     return 1;\r
   }\r
 \r
     return 1;\r
   }\r
 \r
+  set_nssm_service_defaults(service);\r
   memmove(service->name, argv[0], strlen(argv[0]));\r
   memmove(service->exe, argv[1], strlen(argv[1]));\r
 \r
   memmove(service->name, argv[0], strlen(argv[0]));\r
   memmove(service->exe, argv[1], strlen(argv[1]));\r
 \r
index 9c596f1..bb44a41 100644 (file)
--- a/service.h
+++ b/service.h
@@ -67,6 +67,7 @@ void log_service_control(char *, unsigned long, bool);
 unsigned long WINAPI service_control_handler(unsigned long, unsigned long, void *, void *);\r
 \r
 nssm_service_t *alloc_nssm_service();\r
 unsigned long WINAPI service_control_handler(unsigned long, unsigned long, void *, void *);\r
 \r
 nssm_service_t *alloc_nssm_service();\r
+void set_nssm_service_defaults(nssm_service_t *);\r
 void cleanup_nssm_service(nssm_service_t *);\r
 SC_HANDLE open_service_manager();\r
 int pre_install_service(int, char **);\r
 void cleanup_nssm_service(nssm_service_t *);\r
 SC_HANDLE open_service_manager();\r
 int pre_install_service(int, char **);\r