The MSDN documentation does not mention this, but it seems that the value specified in RequestAdditionalTime is not really extra time. Instead, it replaces the value in ServicePipeTimeout. Worse, any value greater than two minutes (120,000 milliseconds) is ignored, i.e. Closes in two minutes.
I hope this is not the case, but I am posting this as the worst answer.
Lars, the short answer is no.
I would say that now I understand that Windows Services should be designed to quickly start and complete processing when required.
As developers, we tend to focus on the implementation of the processing, and then pack it and provide it as a Windows service.
However, this is really not the right approach to designing Windows services. Services should be able to respond quickly to start and stop requests, not only when the administrator makes a request from the services console, but also when the operating system asks for a start as part of its initial processing or stop, as it shuts down,
Consider what happens when Windows is set to shut down, when the UPS indicates a power failure. Not suitable for the service to answer "I need a few more minutes ...".
It is possible to write services that respond quickly to requests termination, even when they implement lengthy processing tasks. Typically, a lengthy process will consist of batch processing of data, and processing should check to see if a stop has been requested at the smallest unit of work that ensures data consistency.
As an example, the first service where I found a stop timeout was a problem with processing a notification queue on a remote server. Processing received a notification from the queue, calling a web service to retrieve data associated with the notification object, and then writing a data file for processing by another application.
I implemented processing as a timer call for one method. After a method call, it does not return until all notifications in the queue have been processed. I realized that this is a mistake for the Windows service, because sometimes there can be tens of thousands of notifications in the queue, and processing can take several minutes.
The method is capable of processing 50 notifications per second. So what I had to do was do a check to see if a stop was requested before each notification was processed. This would allow the method to return when it completed the processing of the notification, but before it began to process the next notification. This would ensure that the service responds quickly to a stop request, and all pending notifications remain in the queue for processing when the service restarts.