Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

How to stop a Windows Service gracefully?

Posted on 2007-11-19
3
Medium Priority
?
829 Views
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.
0
Comment
Question by:EwS
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
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:

http://www.thescripts.com/forum/thread124604.html

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

Hope this help.s
Jas.
0
 
LVL 8

Expert Comment

by:slado2
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.
http://msdn2.microsoft.com/en-us/library/d56de412(VS.80).aspx
0
 
LVL 8

Accepted Solution

by:
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)
http://msdn2.microsoft.com/en-us/library/6b1kkss0.aspx
The call RequestAdditionalTime to inform the service manager that your service is still stopping if the thread is not finished yet.
http://msdn2.microsoft.com/en-us/library/system.serviceprocess.servicebase.requestadditionaltime.aspx
protected override void OnStop()
{
  int joinTimeout = 500; // 500 ms
  while(!FileProcessingThread.Join(joinTimeout))
  {
    this.RequestAdditionalTime(1000);  // request additional 1 second to stop the service
  }
}

Open in new window

0

Featured Post

Tech or Treat! - Giveaway

Submit an article about your scariest tech experience—and the solution—and you’ll be automatically entered to win one of 4 fantastic tech gadgets.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

It seems a simple enough task, yet I see repeated questions asking how to do it: how to pass data between two forms. In this article, I will show you the different mechanisms available for you to do just that. This article is directed towards the .N…
More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
In a question here at Experts Exchange (https://www.experts-exchange.com/questions/29062564/Adobe-acrobat-reader-DC.html), a member asked how to create a signature in Adobe Acrobat Reader DC (the free Reader product, not the paid, full Acrobat produ…
This lesson discusses how to use a Mainform + Subforms in Microsoft Access to find and enter data for payments on orders. The sample data comes from a custom shop that builds and sells movable storage structures that are delivered to your property. …

618 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