ServiceController.Stop Method
Stops this service and any services that are dependent on this service.
Assembly: System.ServiceProcess (in System.ServiceProcess.dll)
| Exception | Condition |
|---|---|
| Win32Exception |
An error occurred when accessing a system API. |
| InvalidOperationException |
The service was not found. |
If any services depend on this service for their operation, they will be stopped before this service is stopped. The DependentServices property contains the set of services that depend on this one.
If you stop a service that this service depends on, call the Stop method on this service within the Stop method of the parent service. The ServicesDependedOn property contains the services that this service depends on.
The following example uses the ServiceController class to check the current status of the Telnet service. If the service is stopped, the example starts the service. If the service is running, the example stops the service.
// Toggle the Telnet service - // If it is started (running, paused, etc), stop the service. // If it is stopped, start the service. ServiceController sc = new ServiceController("Telnet"); Console.WriteLine("The Telnet service status is currently set to {0}", sc.Status.ToString()); if ((sc.Status.Equals(ServiceControllerStatus.Stopped)) || (sc.Status.Equals(ServiceControllerStatus.StopPending))) { // Start the service if the current status is stopped. Console.WriteLine("Starting the Telnet service..."); sc.Start(); } else { // Stop the service if its status is not set to "Stopped". Console.WriteLine("Stopping the Telnet service..."); sc.Stop(); } // Refresh and display the current service status. sc.Refresh(); Console.WriteLine("The Telnet service status is now set to {0}.", sc.Status.ToString());
-
ServiceControllerPermission
for controlling services on the computer. Associated enumeration: ServiceControllerPermissionAccess.Control
-
SecurityPermission
for unrestricted access to service information. Associated enumeration: PermissionState.Unrestricted
- Full trust for the immediate caller. This member cannot be used by partially trusted code. For more information, see Using Libraries from Partially Trusted Code.
Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
It appears the Stop() method throws an undocumented timeout exception. I have the following code:
using System;
using System.ServiceProcess;
namespace stopservice
{
class Program
{
static void Main(string[] args)
{
try
{
StopService();
Console.WriteLine(DateTime.Now + " IISADMIN stopped.");
}
catch (Exception ex)
{
Console.WriteLine(DateTime.Now + "Main exception is: "+ ex.Message);
}
}
public static void StopService()
{
ServiceController sc = new ServiceController("IISADMIN");
if( sc.Status == ServiceControllerStatus.Running)
{
Console.WriteLine(DateTime.Now +" Stopping IISADMIN Service.");
try
{
sc.Stop();
}
catch (Exception ex)
{
Console.WriteLine(DateTime.Now + " Ignore Stop() exception: " + ex.Message);
}
try
{
Console.WriteLine(DateTime.Now + " Waiting for IISADMIN Service to stop.");
sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(30));
}
catch (Exception ex)
{
Console.WriteLine(DateTime.Now+" Exception inside StopService function: " + ex.Message);
}
}
}
}
}
On a Windows 2003 VMWare box, I see:
C:\>stopservice.exe
7/20/2010 10:47:14 AM Stopping IISADMIN Service.
7/20/2010 10:47:45 AM Ignore Stop() exception: Time out has expired and the operation has not been completed.
7/20/2010 10:47:45 AM Waiting for IISADMIN Service to stop.
7/20/2010 10:48:15 AM Exception inside StopService function: Time out has expired and the operation has not been c
ompleted.
7/20/2010 10:48:15 AM IISADMIN stopped.
C:\>
Using a reflector, I saw that the Stop() method calls it's own WaitForStatus() with a 30 second timeout but fails to catch any exception -- it only has a try-finally block with no catch.
- 7/20/2010
- helpmespock