Let the dump command copy a service.
[nssm.git] / service.cpp
index 8561616..f18626c 100644 (file)
@@ -906,7 +906,11 @@ int pre_edit_service(int argc, TCHAR **argv) {
     mandatory = 3;\r
     mode = MODE_RESETTING;\r
   }\r
-  else if (str_equiv(verb, _T("dump"))) mode = MODE_DUMPING;\r
+  else if (str_equiv(verb, _T("dump"))) {\r
+    mandatory = 1;\r
+    remainder = 2;\r
+    mode = MODE_DUMPING;\r
+  }\r
   if (argc < mandatory) return usage(1);\r
 \r
   const TCHAR *parameter = 0;\r
@@ -1056,17 +1060,27 @@ int pre_edit_service(int argc, TCHAR **argv) {
   int ret;\r
 \r
   if (mode == MODE_DUMPING) {\r
+    TCHAR *service_name = service->name;\r
+    if (argc > remainder) service_name = argv[remainder];\r
     if (service->native) key = 0;\r
     else {\r
       key = open_registry(service->name, KEY_READ);\r
       if (! key) return 4;\r
     }\r
 \r
+    TCHAR quoted_service_name[SERVICE_NAME_LENGTH * 2];\r
+    TCHAR quoted_exe[EXE_LENGTH * 2];\r
+    TCHAR quoted_nssm[EXE_LENGTH * 2];\r
+    if (quote(service_name, quoted_service_name, _countof(quoted_service_name))) return 5;\r
+    if (quote(service->exe, quoted_exe, _countof(quoted_exe))) return 6;\r
+    if (quote(nssm_exe(), quoted_nssm, _countof(quoted_nssm))) return 6;\r
+    _tprintf(_T("%s install %s %s\n"), quoted_nssm, quoted_service_name, quoted_exe);\r
+\r
     ret = 0;\r
     for (i = 0; settings[i].name; i++) {\r
       setting = &settings[i];\r
       if (! setting->native && service->native) continue;\r
-      if (dump_setting(service->name, key, service->handle, setting)) ret++;\r
+      if (dump_setting(service_name, key, service->handle, setting)) ret++;\r
     }\r
 \r
     if (! service->native) RegCloseKey(key);\r