RegisterPowerSettingNotification is unnecessary.
[nssm.git] / ChangeLog.txt
index cfcbce6..62fd6b8 100644 (file)
-Changes since 2.21
-------------------
-  * Existing services can now be managed using the GUI
-    or on the command line.
-
-  * NSSM can now optionally rotate existing files when
-    redirecting I/O.
-
-  * Unqualified path names are now relative to the
-    application startup directory when redirecting I/O.
-
-  * NSSM can now set the service display name, description,
-    startup type and log on details.
-
-Changes since 2.20
-------------------
-  * Services installed from the GUI no longer have incorrect
-    AppParameters set in the registry.
-
-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
-    instead of replacing it.
-
-  * The GUI is significantly less sucky.
-
-Changes since 2.17
-------------------
-  * Timeouts for each shutdown method can be configured in
-    the registry.
-
-  * The GUI is slightly less sucky.
-
-Changes since 2.16
-------------------
-  * NSSM can now redirect the service's I/O streams to any path
-    capable of being opened by CreateFile().
-
-  * Allow building on Visual Studio Express.
-
-  * Silently ignore INTERROGATE control.
-
-  * Try to send Control-C events to console applications when
-    shutting them down.
-
-Changes since 2.15
-------------------
-  * Fixed case where NSSM could kill unrelated processes when
-    shutting down.
-
-Changes since 2.14
-------------------
-  * NSSM is now translated into Italian.
-
-  * Fixed GUI not allowing paths longer than 256 characters.
-
-Changes since 2.13
-------------------
-  * Fixed default GUI language being French not English.
-
-Changes since 2.12
-------------------
-  * Fixed failure to run on Windows 2000.
-
-Changes since 2.11
-------------------
-  * NSSM is now translated into French.
-
-  * Really ensure systems recovery actions can happen.
-
-    The change supposedly introduced in v2.4 to allow service recovery
-    actions to be activated when the application exits gracefully with
-    a non-zero error code didn't actually work.
-
-Changes since 2.10
-------------------
-  * Support AppEnvironment for compatibility with srvany.
-
-Changes since 2.9
------------------
-  * Fixed failure to compile messages.mc in paths containing spaces.
-
-  * 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.
-
-Changes since 2.7
------------------
-  * Read Application, AppDirectory and AppParameters before each restart so
-    a change to any one doesn't require restarting NSSM itself.
-
-  * Fixed messages not being sent to the event log correctly in some
-    cases.
-
-  * Try to handle (strictly incorrect) quotes in AppDirectory.
-
-    Windows directories aren't allowed to contain quotes so CreateProcess()
-    will fail if the AppDirectory is quoted.  Note that it succeeds even if
-    Application itself is quoted as the application plus parameters are
-    interpreted as a command line.
-
-  * Fixed failed to write full arguments to AppParameters when
-    installing a service.
-
-  * Throttle restarts.
-
-    Back off from restarting the application immediately if it starts
-    successfully but exits too soon.  The default value of "too soon" is
-    1500 milliseconds.  This can be configured by adding a DWORD value
-    AppThrottle to the registry.
-    
-    Handle resume messages from the service console to restart the
-    application immediately even if it is throttled.
-
-  * Try to kill the process tree gracefully.
-
-    Before calling TerminateProcess() on all processes assocatiated with
-    the monitored application, enumerate all windows and threads and
-    post appropriate messages to them.  If the application bothers to
-    listen for such messages it has a chance to shut itself down gracefully.
-
-Changes since 2.6
------------------
-  * Handle missing registry values.
-
-    Warn if AppParameters is missing.  Warn if AppDirectory is missing or
-    unset and choose a fallback directory.
-    First try to find the parent directory of the application.  If that
-    fails, eg because the application path is just "notepad" or something,
-    start in the Windows directory.
-
-  * Kill process tree when stopping service.
-
-    Ensure that all child processes of the monitored application are
-    killed when the service stops by recursing through all running
-    processes and terminating those whose parent is the application
-    or one of its descendents.
-
-Changes since 2.5
------------------
-  * Removed incorrect ExpandEnvironmentStrings() error.
-
-    A log_event() call was inadvertently left in the code causing an error
-    to be set to the eventlog saying that ExpandEnvironmentStrings() had
-    failed when it had actually succeeded.
-
-Changes since 2.4
------------------
-  * Allow use of REG_EXPAND_SZ values in the registry.
-
-  * Don't suicide on exit status 0 by default.
-
-    Suiciding when the application exits 0 will cause recovery actions to be
-    taken.  Usually this is inappropriate.  Only suicide if there is an
-    explicit AppExit value for 0 in the registry.
-    
-    Technically such behaviour could be abused to do something like run a
-    script after successful completion of a service but in most cases a
-    suicide is undesirable when no actual failure occurred.
-
-  * Don't hang if startup parameters couldn't be determined.
-    Instead, signal that the service entered the STOPPED state.
-    Set START_PENDING state prior to actual startup.
-
-Changes since 2.3
------------------
-  * Ensure systems recovery actions can happen.
-
-    In Windows versions earlier than Vista the service manager would only
-    consider a service failed (and hence eligible for recovery action) if
-    the service exited without setting its state to SERVICE_STOPPED, even if
-    it signalled an error exit code.
-    In Vista and later the service manager can be configured to treat a
-    graceful shutdown with error code as a failure but this is not the
-    default behaviour.
-
-    Try to configure the service manager to use the new behaviour when
-    starting the service so users who set AppExit to Exit can use recovery
-    actions as expected.
-
-    Also recognise the new AppExit option Suicide for use on pre-Vista
-    systems.  When AppExit is Suicide don't stop the service but exit
-    inelegantly, which should be seen as a failure.
-
-Changes since 2.2
------------------
-  * Send properly formatted messages to the event log.
-
-  * Fixed truncation of very long path lengths in the registry.
-
-Changes since 2.1
------------------
- *  Decide how to handle application exit.
-
-    When the service exits with exit code n look in
-    HKLM\SYSTEM\CurrentControlSet\Services\<service>\Parameters\AppExit\<n>,
-    falling back to the unnamed value if no such code is listed.  Parse the
-    (string) value of this entry as follows:
-
-        Restart: Start the application again (NSSM default).
-        Ignore:  Do nothing (srvany default).
-        Exit:    Stop the service.
-
-Changes since 2.0
------------------
-  * Added support for building a 64-bit executable. 
-
-  * Added project files for newer versions of Visual Studio.
+Changes since 2.24\r
+------------------\r
+  * Allow skipping kill_process_tree().\r
+\r
+  * NSSM can now sleep a configurable amount of time after\r
+    rotating output files.\r
+\r
+  * NSSM can now rotate log files by calling CopyFile()\r
+    followed by SetEndOfFile(), allowing it to rotate files\r
+    which other processes hold open.\r
+\r
+Changes since 2.23\r
+------------------\r
+  * NSSM once again calls TerminateProcess() correctly.\r
+\r
+Changes since 2.22\r
+------------------\r
+  * NSSM no longer clutters the event log with "The specified\r
+    procedure could not be found" on legacy Windows releases.\r
+\r
+  * Fixed failure to set a local username to run the service.\r
+\r
+Changes since 2.21\r
+------------------\r
+  * Existing services can now be managed using the GUI\r
+    or on the command line.\r
+\r
+  * NSSM can now set the priority class and processor\r
+    affinity of the managed application.\r
+\r
+  * NSSM can now apply an unconditional delay before\r
+    restarting the application.\r
+\r
+  * NSSM can now optionally rotate existing files when\r
+    redirecting I/O.\r
+\r
+  * Unqualified path names are now relative to the\r
+    application startup directory when redirecting I/O.\r
+\r
+  * NSSM can now set the service display name, description,\r
+    startup type and log on details.\r
+\r
+  * All services now receive a standard console window,\r
+    allowing them to read input correctly (if running in\r
+    interactive mode).\r
+\r
+Changes since 2.20\r
+------------------\r
+  * Services installed from the GUI no longer have incorrect\r
+    AppParameters set in the registry.\r
+\r
+Changes since 2.19\r
+------------------\r
+  * Services installed from the commandline without using the\r
+    GUI no longer have incorrect AppStopMethod* registry\r
+    entries set.\r
+\r
+Changes since 2.18\r
+------------------\r
+  * Support AppEnvironmentExtra to append to the environment\r
+    instead of replacing it.\r
+\r
+  * The GUI is significantly less sucky.\r
+\r
+Changes since 2.17\r
+------------------\r
+  * Timeouts for each shutdown method can be configured in\r
+    the registry.\r
+\r
+  * The GUI is slightly less sucky.\r
+\r
+Changes since 2.16\r
+------------------\r
+  * NSSM can now redirect the service's I/O streams to any path\r
+    capable of being opened by CreateFile().\r
+\r
+  * Allow building on Visual Studio Express.\r
+\r
+  * Silently ignore INTERROGATE control.\r
+\r
+  * Try to send Control-C events to console applications when\r
+    shutting them down.\r
+\r
+Changes since 2.15\r
+------------------\r
+  * Fixed case where NSSM could kill unrelated processes when\r
+    shutting down.\r
+\r
+Changes since 2.14\r
+------------------\r
+  * NSSM is now translated into Italian.\r
+\r
+  * Fixed GUI not allowing paths longer than 256 characters.\r
+\r
+Changes since 2.13\r
+------------------\r
+  * Fixed default GUI language being French not English.\r
+\r
+Changes since 2.12\r
+------------------\r
+  * Fixed failure to run on Windows 2000.\r
+\r
+Changes since 2.11\r
+------------------\r
+  * NSSM is now translated into French.\r
+\r
+  * Really ensure systems recovery actions can happen.\r
+\r
+    The change supposedly introduced in v2.4 to allow service recovery\r
+    actions to be activated when the application exits gracefully with\r
+    a non-zero error code didn't actually work.\r
+\r
+Changes since 2.10\r
+------------------\r
+  * Support AppEnvironment for compatibility with srvany.\r
+\r
+Changes since 2.9\r
+-----------------\r
+  * Fixed failure to compile messages.mc in paths containing spaces.\r
+\r
+  * Fixed edge case with CreateProcess().\r
+\r
+    Correctly handle the case where the application executable is under\r
+    a path which contains space and an executable sharing the initial\r
+    part of that path (up to a space) exists.\r
+\r
+Changes since 2.8\r
+-----------------\r
+  * Fixed failure to run on Windows versions prior to Vista.\r
+\r
+Changes since 2.7\r
+-----------------\r
+  * Read Application, AppDirectory and AppParameters before each restart so\r
+    a change to any one doesn't require restarting NSSM itself.\r
+\r
+  * Fixed messages not being sent to the event log correctly in some\r
+    cases.\r
+\r
+  * Try to handle (strictly incorrect) quotes in AppDirectory.\r
+\r
+    Windows directories aren't allowed to contain quotes so CreateProcess()\r
+    will fail if the AppDirectory is quoted.  Note that it succeeds even if\r
+    Application itself is quoted as the application plus parameters are\r
+    interpreted as a command line.\r
+\r
+  * Fixed failed to write full arguments to AppParameters when\r
+    installing a service.\r
+\r
+  * Throttle restarts.\r
+\r
+    Back off from restarting the application immediately if it starts\r
+    successfully but exits too soon.  The default value of "too soon" is\r
+    1500 milliseconds.  This can be configured by adding a DWORD value\r
+    AppThrottle to the registry.\r
+    \r
+    Handle resume messages from the service console to restart the\r
+    application immediately even if it is throttled.\r
+\r
+  * Try to kill the process tree gracefully.\r
+\r
+    Before calling TerminateProcess() on all processes assocatiated with\r
+    the monitored application, enumerate all windows and threads and\r
+    post appropriate messages to them.  If the application bothers to\r
+    listen for such messages it has a chance to shut itself down gracefully.\r
+\r
+Changes since 2.6\r
+-----------------\r
+  * Handle missing registry values.\r
+\r
+    Warn if AppParameters is missing.  Warn if AppDirectory is missing or\r
+    unset and choose a fallback directory.\r
+    First try to find the parent directory of the application.  If that\r
+    fails, eg because the application path is just "notepad" or something,\r
+    start in the Windows directory.\r
+\r
+  * Kill process tree when stopping service.\r
+\r
+    Ensure that all child processes of the monitored application are\r
+    killed when the service stops by recursing through all running\r
+    processes and terminating those whose parent is the application\r
+    or one of its descendents.\r
+\r
+Changes since 2.5\r
+-----------------\r
+  * Removed incorrect ExpandEnvironmentStrings() error.\r
+\r
+    A log_event() call was inadvertently left in the code causing an error\r
+    to be set to the eventlog saying that ExpandEnvironmentStrings() had\r
+    failed when it had actually succeeded.\r
+\r
+Changes since 2.4\r
+-----------------\r
+  * Allow use of REG_EXPAND_SZ values in the registry.\r
+\r
+  * Don't suicide on exit status 0 by default.\r
+\r
+    Suiciding when the application exits 0 will cause recovery actions to be\r
+    taken.  Usually this is inappropriate.  Only suicide if there is an\r
+    explicit AppExit value for 0 in the registry.\r
+    \r
+    Technically such behaviour could be abused to do something like run a\r
+    script after successful completion of a service but in most cases a\r
+    suicide is undesirable when no actual failure occurred.\r
+\r
+  * Don't hang if startup parameters couldn't be determined.\r
+    Instead, signal that the service entered the STOPPED state.\r
+    Set START_PENDING state prior to actual startup.\r
+\r
+Changes since 2.3\r
+-----------------\r
+  * Ensure systems recovery actions can happen.\r
+\r
+    In Windows versions earlier than Vista the service manager would only\r
+    consider a service failed (and hence eligible for recovery action) if\r
+    the service exited without setting its state to SERVICE_STOPPED, even if\r
+    it signalled an error exit code.\r
+    In Vista and later the service manager can be configured to treat a\r
+    graceful shutdown with error code as a failure but this is not the\r
+    default behaviour.\r
+\r
+    Try to configure the service manager to use the new behaviour when\r
+    starting the service so users who set AppExit to Exit can use recovery\r
+    actions as expected.\r
+\r
+    Also recognise the new AppExit option Suicide for use on pre-Vista\r
+    systems.  When AppExit is Suicide don't stop the service but exit\r
+    inelegantly, which should be seen as a failure.\r
+\r
+Changes since 2.2\r
+-----------------\r
+  * Send properly formatted messages to the event log.\r
+\r
+  * Fixed truncation of very long path lengths in the registry.\r
+\r
+Changes since 2.1\r
+-----------------\r
+ *  Decide how to handle application exit.\r
+\r
+    When the service exits with exit code n look in\r
+    HKLM\SYSTEM\CurrentControlSet\Services\<service>\Parameters\AppExit\<n>,\r
+    falling back to the unnamed value if no such code is listed.  Parse the\r
+    (string) value of this entry as follows:\r
+\r
+        Restart: Start the application again (NSSM default).\r
+        Ignore:  Do nothing (srvany default).\r
+        Exit:    Stop the service.\r
+\r
+Changes since 2.0\r
+-----------------\r
+  * Added support for building a 64-bit executable.\r
+\r
+  * Added project files for newer versions of Visual Studio.\r