How to stop a Windows Service gracefully?

Posted on 2007-11-19
Medium Priority
Last Modified: 2013-11-26
I have a Windows Service which processes some files every X seconds. The service should run 24/7 unless there is an exception, in which case I stop the service. However, there are times when I would want to stop the service manually (through Admin Tools/Services). How do I ensure that when I do that while the function that does the file processing is still executing, the service will wait for the function to finish? Is there anything I can put in OnStop() to detect whether the function is running or not? I suppose I could have the function turn some app settings on when it starts executing and off when it finishes executing, and add some code in OnStop() to check the setting. However, I would have to implement a loop to constantly check for the flag, plus I don't know how long OnStop() can wait?

I would appreciate any suggestions. Thank you.
Question by:EwS
  • 2
LVL 10

Assisted Solution

by:Jason Evans
Jason Evans earned 400 total points
ID: 20313830
Hi there.

Here's a link to a similar issue:


What you can do is use the thread.Join technique to try and come to a smooth halt.

Hope this help.s

Expert Comment

ID: 20314263
If your service takes some time to stop you should inform servicemanager that the service status is stop pending and you need some more time.

Accepted Solution

slado2 earned 600 total points
ID: 20314755
To make things clear:
I assume that your service processing (file operations in your case) is done in a separate thread. When OnStop is called then you should call Join(int Time)
The call RequestAdditionalTime to inform the service manager that your service is still stopping if the thread is not finished yet.
protected override void OnStop()
  int joinTimeout = 500; // 500 ms
    this.RequestAdditionalTime(1000);  // request additional 1 second to stop the service

Open in new window


Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
An ASP.NET Web Form User Control is not newly introduced in ASP.NET. In fact, it was an old technology yet still playing a role to generate web content, especially when we want to use it to have a better and easy way to control part of the web conte…
In the video, one can understand the process of resizing images in single or bulk. Kernel Bulk Image Resizer is an easy to use tool for resizing large number of images. One can add and resize multiple images with this tool in single go. The video sh…
To export Lotus Notes to Outlook PST or Exchange and Domino Server files to Exchange Server or PST files with ease, go for Kernel for Lotus Notes to Outlook conversion tool. Through the video, you can watch the conversion process. A common user with…

588 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question