The C++ framework for developing highly scalable, high performance servers on Windows platforms.

Release Notes - Service Tools Library


You might also be interested in the release notes for the libraries that this one is built on:


Version 7.4
  • Remove support for Visual Studio 2015.

Version 7.3
  • No changes.

Version 7.2
  • Removal of manual "#define include guards" now that all supported compilers support pragma once.
  • Removal of out of date lint directives.
  • Added support for Visual Studio 2022 Preview.

Version 7.1
Version 7.0
  • Major changes due to preparations for multi-platform support. Addition of CoreTools library which contains all cross platform code that was previously in Win32Tools.

Version 6.9.5
  • Added support for Visual Studio 2019 (16.5 - 16.9).
  • Updated project files to make release build optimisations consistent.
  • Rationalised precompiled header usage.
  • Removed unrequired includes.
  • Began to move towards removing JetByteTools\Win32Tools\Utils.h by splitting it into more functionally cohesive headers.
  • Changes to avoid explicitly catching JetByteTools::Win32::CSEHException now that it derives from JetByteTools::Win32::CException.

Version 6.9.4
  • Added support for Visual Studio 2019 (16.4).

Version 6.9.3
  • Fixed issued raised by Resharper++
  • Changed include path separators from \ to / so as to support compilation on Linux using CLANG
  • Fixed case of include file names to aid portability.
  • Migrating code towards 'modern C++' idioms.
  • Suppress warning C4355 "'this': used in base member initializer list" in Warnings.h and remove per file suppressions. We just use this idiom far too often for it to be a special case.
  • Added support for Visual Studio 2019 (16.3).
  • Dropped support for Visual Studio 2013.

Version 6.9.2
  • Added support for Visual Studio 2017 (15.6 - 15.9).
  • Added support for Visual Studio 2019 (16 - 16.2).
  • Bug fix to JetByteTools::Service::CShutdownHandler::Run() to fix a bug during shutdown for services that take time to shut down.

Version 6.9.1
  • Added support for Visual Studio 2017 15.5.

Version 6.9
  • Fixed issued raised by CppDepend
  • Fixed issued raised by Resharper++

Version 6.8
  • Made pragma once unconditional in headers.
  • Fixed issued raised by PC-Lint Plus.
  • Fixed issued raised by CppDepend
  • Fixed issued raised by Resharper++
  • Use override rather than virtual for implementations of virtual functions in derived classes.
  • Allow derived classes to override how service names and descriptions are built using: JetByteTools::Service::CService::AddInstanceNameToServiceName(), JetByteTools::Service::CService::AddInstanceNameToDisplayName() and JetByteTools::Service::CService::AddInstanceNameToServiceDescription().

Version 6.7
Version 6.6.5
  • Adjusted how services shut down in error situations when the service has failure actions set. When failure actions are enabled for a service we will now shut down in such a way that they are triggered. This involves terminating the thread that called StartServiceCtrlDispatcher() and making sure that we don't call SetServiceStatus() with a status of SERVICE_STOPPED. We shut down normally if the service is in the process or starting up or shutting down when the error occurs so that we avoid the SCM repeatedly restarting a service that we can't shut down. If "Enable actions for stops with errors" is set then the SCM will restart the service if it retuns a non-zero exit code, even if it calls SetServiceStatus() with a status of SERVICE_STOPPED and there's no way for us to prevent it restarting a service that is failing during init or shutdown.
  • If a service is configured with SERVICE_ACCEPT_SESSIONCHANGE then we now call WTSEnumerateSessions() when the service starts and dispatch session change events for existing sessions. This removes a race condition in service start up and sessions starting.

Version 6.6.4
  • No changes.

Version 6.6.3
  • Ran Visual Lint using Gimpel PC Lint on all code and adjusted to remove warnings and fix bugs.
  • Removed all use of exception specifications. We only ever used throw() but that's now gone too.
  • Protected non-virtual destructors on interfaces are now virtual even though they you can't delete the object via the interface.
  • All destructors that could throw exceptions now have optional "log and swallow" exception handlers which are enabled by default. This is better than ignoring the problem and being faced with a call to std::terminate() which can be hard to track down.
  • Bug fix to JetByteTools::Service::CService::ServiceMain() so that we set and clear the m_serviceStarting flag correctly.
  • Changed the number of tabs used in the JetByteTools::Service::CServiceManager::GetExtraHelp() message so that the remove option lines up correctly. I think this may be a dialog font issue and it may be inconsistent on different platforms.

Version 6.6.2
  • Changes to remove non-trivial, function level static objects from the code, the construction of which is problematic in multi-threaded code.
  • Added the concept of a service "Restart". A restart can be initiated by the service itself by calling JetByteTools::Service::IServiceShutdown::Restart() and this will result in a call to JetByteTools::Service::IServiceCallbacks::RestartService() which can return false to prevent the restart from occurring. If a restart is prevented then the service will shut down rather than restart. If a restart is allowed then the service will go through the normal service shut down process, then optionally pause for a period of time and then go through the normal service start up process once again and transition back to a running state. This can be useful if you want a service to be able to monitor its configuration and completely restart if it changes.
  • Bug fix in JetByteTools::Service::CShutdownHandler::Run(). Changed the way we respond to shutdown and pause events (if enabled) so that we only respond to each event once rather than repeatedly routing shutdown events to the service whilst the event is set. This was causing non-paged pool exhaustion in some situations when the service failed to shutdown.

Version 6.6.1
  • No changes.

Version 6.6
Version 6.5.9
  • No changes.

Version 6.5.8
  • No changes.

Version 6.5.7
  • Updated our support of Visual Studio 2012 to the RTM version. Added a few more warning suppressions. Fixed the solution file format so that it's actually a 2012 solution file and not a 2010 solution file using the 2012 tool chain.

Version 6.5.6
  • Updated our support of Visual Studio 2012 (11) to the RC version. Added a few more warning suppressions. Renamed the output directories. Renamed the solutions and projects from .11. to .2012.
  • Breaking Change JetByteTools::Service::IService::ParseServiceSpecificCommandLineArgument() function signature change, it can now return an error message on failure.
  • Breaking Change New virtual function on interface, JetByteTools::Service::IService::CheckWeCanRun(). This is called before we initialise the services, but after we've parsed service specific command line arguments, it's a chance to report any fatal errors (due to incorrect command line arguments, or other restrictions) via the new JetByteTools::Service::IDisplayMessageBox interface which abides by the /noMessages command line switch and knows if you're running as a service and can't display messages, etc.
  • Breaking Change New virtual function on interface, JetByteTools::Service::IService::OnStartupFailure(). This gets passed any error message that will be displayed in a message box as a result of a start up failure. It allows you to log this message rather than enabling 'message box logging' for all message boxes.
  • Added "Per instance" external events for controlling multi-instance "services" which are running as exes via the /run switch. Basically this adds a uniquely named shutdown and pause event per service instance so that you can control the instances separately.
  • Bug fix. We no longer include support for RegisterPowerSettingNotification() in Windows Server 2003 as the entrypoint doesn't exist even though the SDK headers suggest it should.
  • Breaking Change JetByteTools::Service::IService::OnInstallPerformanceCounters() and JetByteTools::Service::IService::OnRemovePerformanceCounters() function signature changes. These now take a default error message but allow you to change it if the actual error that you encounter is different due to the fact that you're doing more complex add/removal operations...
  • Breaking Chnage The exe now returns an exit code of 0 if you call it with /help. Previously it returned and exit code of 255 indicating an error.

Version 6.5.5
  • Fixed some warnings generated by /analyze.

Version 6.5.4
  • No changes.

Version 6.5.3
  • No changes.

Version 6.5.2
  • No changes.

Version 6.5.1
  • No changes.

Version 6.5
Version 6.4
Version 6.3.3
  • No changes.

Version 6.3.2
  • No changes.

Version 6.3.1
  • No changes.

Version 6.3
Version 6.2
Version 6.1.1
  • No changes.

Version 6.1
  • Complete redesign of the whole library... See here http://www.lenholgate.com/archives/000850.html for details. Here are some of the changes:
    • Callbacks into user code now rely on a callback interface rather than subclassing of the service base class.
    • Separated the single instance and the multi instance service code into two separate base classes; JetByteTools::Service::CServiceManager and JetByteTools::Service::CServiceInstanceManager, both of which inherit from JetByteTools::Service::CServiceManagerBase.
    • We now support all of the 'new' service control functionality:
      • SERVICE_CONTROL_PRESHUTDOWN
      • SERVICE_CONTROL_PARAMCHANGE
      • SERVICE_CONTROL_NETBINDADD
      • SERVICE_CONTROL_NETBINDREMOVE
      • SERVICE_CONTROL_NETBINDENABLE
      • SERVICE_CONTROL_NETBINDDISABLE
      • SERVICE_CONTROL_HARDWAREPROFILECHANGE
      • SERVICE_CONTROL_SESSIONCHANGE
      • SERVICE_CONTROL_DEVICEEVENT
      • SERVICE_CONTROL_POWEREVENT
      • and custom control values between 128 and 255...
    • All OnException() callbacks into user code are now wrapped in exception handlers which trap and swallow all exceptions. You're not allowed to throw out of these callback handlers!
    • Redesign to remove all race conditions relating to service shutdown. See here <a href="http://www.lenholgate.com/archives/000848.html"http://www.lenholgate.com/archives/000848.html for details.
    • Service installation and configuration now supports all of the 'new' service configuration options:
      • SERVICE_FAILURE_ACTIONS
      • SERVICE_REQUIRED_PRIVILEGES_INFO
      • SERVICE_SID_INFO
      • SERVICE_DELAYED_AUTO_START_INFO
      • SERVICE_FAILURE_ACTIONS_FLAG
      • SERVICE_PRESHUTDOWN_INFO
  • All interaction with the system's Service Control Manager is via interfaces which allow for much more thorough testing.

Version 6.0
  • You can now provide the name of an event that you require to be signalled when the service has stopped. This is mainly used by our example services so that their test harnesses can monitor them correctly.

Version 5.2.5
  • No changes.

Version 5.2.4
There were no release notes for this library prior to version 5.2.4

Generated on Sun Sep 12 19:06:45 2021 for The Server Framework - v7.4 by doxygen 1.5.3