Allow querying a service's name.
authorIain Patterson <me@iain.cx>
Wed, 1 Jan 2014 16:05:52 +0000 (16:05 +0000)
committerIain Patterson <me@iain.cx>
Wed, 1 Jan 2014 21:28:02 +0000 (21:28 +0000)
Since we can now open a service by its display name it may be
interesting to know what its canonical name is.

Find out with:

    nssm get <displayname> Name

README.txt
messages.mc
settings.cpp
settings.h

index 6955ba4..19fcb8e 100644 (file)
@@ -324,6 +324,7 @@ run NSSM itself.  The parameters recognised are as follows:
   DisplayName: Service display name.\r
   ImagePath: Path to the service executable.\r
   ObjectName: User account which runs the service.\r
+  Name: Service key name.\r
   Start: Service startup type.\r
   Type: Service type.\r
 \r
@@ -381,6 +382,12 @@ exit code of 2, run
     nssm set <servicename> AppExit 2 Exit\r
 \r
 \r
+The Name parameter can only be queried, not set.  It returns the service's\r
+registry key name.  This may be useful to know if you take advantage of\r
+the fact that you can substitute the service's display name anywhere where\r
+the syntax calls for <servicename>.\r
+\r
+\r
 The ObjectName parameter requires an additional argument only when setting\r
 a username.  The additional argument is the password of the user.\r
 \r
@@ -486,6 +493,10 @@ To remove the server:
 \r
     nssm remove UT2004 confirm\r
 \r
+To find out the service name of a service with a display name:\r
+\r
+    nssm get "Background Intelligent Transfer Service" Name\r
+\r
 \r
 Building NSSM from source\r
 -------------------------\r
index a53eee1..376132f 100644 (file)
Binary files a/messages.mc and b/messages.mc differ
index e64fdc5..7340b1c 100644 (file)
@@ -351,6 +351,15 @@ int native_get_imagepath(const TCHAR *service_name, void *param, const TCHAR *na
   return ret;
 }
 
+int native_set_name(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) {
+  print_message(stderr, NSSM_MESSAGE_CANNOT_RENAME_SERVICE);
+  return -1;
+}
+
+int native_get_name(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) {
+  return value_from_string(name, value, service_name);
+}
+
 int native_set_objectname(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) {
   SC_HANDLE service_handle = (SC_HANDLE) param;
   if (! service_handle) return -1;
@@ -666,6 +675,7 @@ settings_t settings[] = {
   { NSSM_NATIVE_DISPLAYNAME, REG_SZ, NULL, true, 0, native_set_displayname, native_get_displayname },
   { NSSM_NATIVE_IMAGEPATH, REG_EXPAND_SZ, NULL, true, 0, native_set_imagepath, native_get_imagepath },
   { NSSM_NATIVE_OBJECTNAME, REG_SZ, NSSM_LOCALSYSTEM_ACCOUNT, true, ADDITIONAL_SETTING, native_set_objectname, native_get_objectname },
+  { NSSM_NATIVE_NAME, REG_SZ, NULL, true, 0, native_set_name, native_get_name },
   { NSSM_NATIVE_STARTUP, REG_SZ, NULL, true, 0, native_set_startup, native_get_startup },
   { NSSM_NATIVE_TYPE, REG_SZ, NULL, true, 0, native_set_type, native_get_type },
   { NULL, NULL, NULL, NULL, NULL }
index 71e31d1..0499dbe 100644 (file)
@@ -4,6 +4,7 @@
 #define NSSM_NATIVE_DESCRIPTION _T("Description")
 #define NSSM_NATIVE_DISPLAYNAME _T("DisplayName")
 #define NSSM_NATIVE_IMAGEPATH _T("ImagePath")
+#define NSSM_NATIVE_NAME _T("Name")
 #define NSSM_NATIVE_OBJECTNAME _T("ObjectName")
 #define NSSM_NATIVE_STARTUP _T("Start")
 #define NSSM_NATIVE_TYPE _T("Type")