Added nssm_exe().
[nssm.git] / README.txt
index ecca5e9..2158741 100644 (file)
@@ -68,6 +68,8 @@ Since version 2.22, NSSM can manage existing services.
 \r
 Since version 2.25, NSSM can execute commands in response to service events.\r
 \r
 \r
 Since version 2.25, NSSM can execute commands in response to service events.\r
 \r
+Since version 2.25, NSSM can list services it manages.\r
+\r
 \r
 Usage\r
 -----\r
 \r
 Usage\r
 -----\r
@@ -331,7 +333,7 @@ a non-zero value of AppRotateBytesHigh.
 If AppRotateDelay is non-zero, NSSM will pause for the given number of\r
 milliseconds after rotation.\r
 \r
 If AppRotateDelay is non-zero, NSSM will pause for the given number of\r
 milliseconds after rotation.\r
 \r
-If AppStdoutCopyAndTruncate or AppStdErrCopyAndTruncate are non-zero, the\r
+If AppStdoutCopyAndTruncate or AppStderrCopyAndTruncate are non-zero, the\r
 stdout (or stderr respectively) file will be rotated by first taking a copy\r
 of the file then truncating the original file to zero size.  This allows\r
 NSSM to rotate files which are held open by other processes, preventing the\r
 stdout (or stderr respectively) file will be rotated by first taking a copy\r
 of the file then truncating the original file to zero size.  This allows\r
 NSSM to rotate files which are held open by other processes, preventing the\r
@@ -406,6 +408,59 @@ application to fail to start.
 Most people will want to use AppEnvironmentExtra exclusively.  srvany only\r
 supports AppEnvironment.\r
 \r
 Most people will want to use AppEnvironmentExtra exclusively.  srvany only\r
 supports AppEnvironment.\r
 \r
+As of version 2.25, NSSM parses AppEnvironment and AppEnvironmentExtra\r
+itself, before reading any other registry values.  As a result it is now\r
+possible to refer to custom environment variables in Application,\r
+AppDirectory and other parameters.\r
+\r
+\r
+Merged service environment\r
+--------------------------\r
+All Windows services can be passed additional environment variables by\r
+creating a multi-valued string (REG_MULTI_SZ) registry value named\r
+HLKM\SYSTEM\CurrentControlSet\Services\<service>\Environment.\r
+\r
+The contents of this environment block will be merged into the system\r
+environment before the service starts.\r
+\r
+Note, however, that the merged environment will be sorted alphabetically\r
+before being processed.  This means that in practice you cannot set,\r
+for example, DIR=%PROGRAMFILES% in the Environment block because the\r
+environment passed to the service will not have defined %PROGRAMFILES%\r
+by the time it comes to define %DIR%.  Environment variables defined in\r
+AppEnvironmentExtra do not suffer from this limitation.\r
+\r
+As of version 2.25, NSSM can get and set the Environment block using\r
+commands similar to:\r
+\r
+    nssm get <servicename> Environment\r
+\r
+It is worth reiterating that the Environment block is available to all\r
+Windows services, not just NSSM services.\r
+\r
+\r
+Service startup environment\r
+---------------------------\r
+The environment NSSM passes to the application depends on how various\r
+registry values are configured.  The following flow describes how the\r
+environment is modified.\r
+\r
+By default:\r
+    The service inherits the system environment.\r
+\r
+If <service>\Environment is defined:\r
+    The contents of Environment are MERGED into the environment.\r
+\r
+If <service>\Parameters\AppEnvironment is defined:\r
+    The service inherits the environment specified in AppEnvironment.\r
+\r
+If <service>\Parameters\AppEnvironmentExtra is defined:\r
+    The contents of AppEnvironmentExtra are APPENDED to the environment.\r
+\r
+Note that AppEnvironment overrides the system environment and the\r
+merged Environment block.  Note also that AppEnvironmentExtra is\r
+guaranteed to be appended to the startup environment if it is defined.\r
+\r
 \r
 Event hooks\r
 -----------\r
 \r
 Event hooks\r
 -----------\r
@@ -519,6 +574,12 @@ If the application crashes and is restarted by NSSM, the order might be:
   Exit/Post\r
 \r
 \r
   Exit/Post\r
 \r
 \r
+If NSSM is redirecting stdout or stderr it can be configured to redirect\r
+the output of any hooks it runs.  Set AppRedirectHooks to 1 to enable\r
+that functionality.  A hook can of course redirect its own I/O independently\r
+of NSSM.\r
+\r
+\r
 Managing services using the GUI\r
 -------------------------------\r
 NSSM can edit the settings of existing services with the same GUI that is\r
 Managing services using the GUI\r
 -------------------------------\r
 NSSM can edit the settings of existing services with the same GUI that is\r
@@ -555,6 +616,7 @@ run NSSM itself.  The parameters recognised are as follows:
 \r
   Description: Service description.\r
   DisplayName: Service display name.\r
 \r
   Description: Service description.\r
   DisplayName: Service display name.\r
+  Environment: Service merged environment.\r
   ImagePath: Path to the service executable.\r
   ObjectName: User account which runs the service.\r
   Name: Service key name.\r
   ImagePath: Path to the service executable.\r
   ObjectName: User account which runs the service.\r
   Name: Service key name.\r
@@ -736,6 +798,13 @@ running multiple instances of NSSM from different locations may be confusing if
 they are not all the same version.\r
 \r
 \r
 they are not all the same version.\r
 \r
 \r
+Listing managed services\r
+------------------------\r
+The following command will print the names of all services managed by NSSM:\r
+\r
+    nssm list\r
+\r
+\r
 Example usage\r
 -------------\r
 To install an Unreal Tournament server:\r
 Example usage\r
 -------------\r
 To install an Unreal Tournament server:\r
@@ -822,6 +891,14 @@ application's child processes.
 Thanks to Miguel Angel Terrón for suggesting copy/truncate rotation.\r
 Thanks to Yuriy Lesiuk for suggesting setting the environment before querying\r
 the registry for parameters.\r
 Thanks to Miguel Angel Terrón for suggesting copy/truncate rotation.\r
 Thanks to Yuriy Lesiuk for suggesting setting the environment before querying\r
 the registry for parameters.\r
+Thanks to Gerald Haider for noticing that installing a service with NSSM in a\r
+path containing spaces was technically a security vulnerability.\r
+Thanks to Scott Ware for reporting a crash saving the environment on XP 32-bit.\r
+Thanks to Stefan and Michael Scherer for reporting a bug writing the event messages source.\r
+Thanks to Paul Baxter for help with Visual Studio 2015.\r
+Thanks to Mathias Breiner for help with Visual Studio and some registry fixes.\r
+Thanks to David Bremner for general tidyups.\r
+Thanks to Nabil Redmann for suggesting redirecting hooks' output.\r
 \r
 Licence\r
 -------\r
 \r
 Licence\r
 -------\r