I'm stopping a service in my application wanted to know what is the usage of
ExitProcess and if I should use it
C++ – Stopping a service in c++ when do I use the ExitProcess() func
c++service
Related Question
- C++ – a smart pointer and when should I use one
- C++ – When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used
- C++ – The Definitive C++ Book Guide and List
- C++ – When to use virtual destructors
- C++ – Why is “using namespace std;” considered bad practice
- C++ – the “–>” operator in C/C++
- Java – Why is processing a sorted array faster than processing an unsorted array
- C++ – use a pointer rather than the object itself
Best Solution
You should never need to use
ExitProcess()
to stop a service. In fact, you should never need to useExitProcess()
at all.Services are deeply intertwined with the SCM, and if a service that it thinks should be running just vanishes it will take some action to repair it. In extreme cases, it will force the system to reboot.
The correct way to stop a service is to use the documented API to ask the SCM to ask the service to stop. It often takes several seconds for this process to complete as the service itself usually needs to a clean shutdown after asking its worker threads to finish up and halt.
The privileges required to interact with the SCM are less dangerous than that required to end an arbitrary process, but neither is usually granted outside of the Administrators group.
Edit: A comment asked about stopping a service from inside itself.
That can be a tough call, especially if the service is in some kind of unfortunate state. The service and the SCM absolutely have to agree that the service is stopping, or the SCM will take the recovery action that was configured for the service.
I do have a complete implementation of a service that might serve as an alternative point of view for how to handle some of these things. It is LuaService and is a framework that allows a (single worker thread) service to be implemented in pure Lua aside from the LuaService executable itself. Its reference manual attempts to fully document the internals, as well as document some of the details of a service's lifetime that are otherwise documented through the interaction of various articles on MSDN.