|
Easily Start, Stop or Restart any Windows Service |
Our free alternative to NET and SC reliably starts/stops/restarts Windows Services from your batch files and scripts
(Restarting the Print Spooler service - click to enlarge)
How to Use ServicePilot: The Command-line Interface
ServicePilot.exe <-start|-stop|-restart> [-wait <sec>] [-warmup <sec>]
[-noforce] [-computer <name>] [-args <params>]
[-verbose] [-retry <times>] <service-name>
where:
-start Start the service.
-stop Stop the service.
-restart Restart the service.
-wait <sec> Wait for at least <sec> seconds before giving up
or taking action. When stopping a service and it
does not transition to the Stopped state in <sec>
seconds, the service's process will be forcibly
terminated (unless the -noforce option has been
specified). When starting and the service does
not transition to the Running state in <sec>
seconds, the operation will fail.
If not provided, the default value is 120
seconds.
-warmup <sec> After starting the service, wait for <sec>
seconds before declaring the operation
successful. That is, if the service stops within
<sec> seconds of starting, the operation should
fail.
-noforce When stopping the service, do not try to forcibly
terminate the service's process if all else
fails.
-computer <name> Instead of working with the local computer, work
with the service on the computer with name (or IP
address) <name>.
-args <params> Pass the given set of parameters when starting
the service. Separate each parameter with a
space. Be sure to quote the entire set of
parameters!
-verbose Produce verbose output.
-retry <times> Retry the operation up to <times> times in the
face of failure. If not provided, the operation
is tried once. Note that when used with the
-wait flag, the entire operation can take up to
<sec> x <times> second(s) to complete.
<service-name> The name (or display name) of the service.
Please be sure to enclose the name in quotes
if it contains at least one space.
Note: using the service name is more efficient.
Upon completion, the exit code is 0 if the operation completed successfully and 1 if it did not.
You can access that exit code via the standard ERRORLEVEL variable.
Using ServicePilot: Three Real-World Examples
-
Restarting the Apple Mobile Device Service
If an iPhone, iPad, or iPod touch
isn't recognized in iTunes on Windows,
the Apple Mobile Device Service may need to be restarted.
The telltale sign is this error message when connecting your device: "This [device] cannot be used because the Apple Mobile Device Service is not started".
To restart the service, issue this command:
ServicePilot.exe -restart "Apple Mobile Device Service"
-
Stopping a "slow" (or busy) service
If your service takes a long time to stop
(or gets stuck stopping),
you should set a long enough "wait time" when using ServicePilot.
For example, we know that our "Device Automation" service can take up to two minutes to shut down. We use this command to stop it:
ServicePilot.exe -stop -wait 120 "Device Automation"
Running with the verbose parameter shows how long it takes to stop the service:
This has been an improvement over NET STOP, which would routinely throw up its hands after a timeout!
-
Starting a service with parameters
Some services accept parameters when started. Those parameters can be specified in the Service Control panel application:
Service Pilot allows you to provide parameters from the command line.
This command starts our "RetailConnection" service with the port number it should use (8080), in debug mode:
ServicePilot.exe -start -args "/port 8080 /debug" RetailConnection
Why use ServicePilot instead of NET START/STOP?
NET.EXE will happily start or stop a service but
it falls short of ServicePilot in a couple of areas:
NET will wait at most 30 seconds for your service to start or stop. This can be a problem for services that take a while to transition.
The inability for NET to patiently wait can lead to unexpected errors in a batch files.
For example, suppose a script contains a NET STOP followed by a NET START.
If the service takes longer than 30 seconds to shut down, then NET STOP will fail and the subsequent NET START will fail as well.
The end result is that the
service will likely end up stopped and out of commission — the very situation that the script was trying to avoid!
It can be awkward to pass parameters to the service using NET START. Each item must be separated out and prefixed with a slash ("/").
For example, this command starts the Spooler service with parameters "one" "two" and "three":
NET START Spooler /"one" /"two" /"three"
It is cumbersome to write the batch file commands to pull apart an existing command line and compose those unnatural prefixed values.
ServicePilot's syntax is much less demanding:
ServicePilot -start "one two three" Spooler
Why use ServicePilot instead of SC START/STOP?
SC.EXE
will also handle starting and stopping a service, but it has some shortcomings as well:
Unlike NET START, SC START simply issues the command to start a service and promptly ends.
SC does not attempt to wait for the service to transition to the Running state.
Because of this, a script using SC to restart a service must be contain extra complexity.
After SC START, the script must loop, periodically checking for the status of the service
and breaking out of the loop when the service moves to the Running state.
ServicePilot will fully restart a service, without extra fuss.
SC STOP ask politely for the service to stop, but it will not terminate the underlying process
if the service fails to stop in a timely manner.
SC cannot stop "rogue" services, which don't respond to the Services Control Manager (SCM).
By default, ServicePilot will try to stop the service's process if the service doesn't transition to the Stopped state within a given timeout period.
This behavior can be turned off by specifying the "-noforce" parameter.
What else would you like ServicePilot to do?
We are constantly improving our software. Please get in touch and let us know how we can do better!
|
|