Ustavitev in zagon storitve prek datoteke šarže ali cmd?

Kako lahko skript bat ali cmd zanesljivo ustavi in zažene storitev s preverjanjem napak (ali mi sporoči, da iz kakršnega koli razloga ni bil uspešen)?

net start [serviceName]

in

net stop [serviceName]

jasno povedo, ali so bili uspešni ali neuspešni. Na primer

U:\>net stop alerter
The Alerter service is not started.

More help is available by typing NET HELPMSG 3521.

Če se izvajajo iz paketne datoteke, imate dostop do ERRORLEVEL povratne kode. 0 pomeni uspeh. Višja vrednost pomeni neuspeh.

Kot datoteka bat, error.bat:

@echo off
net stop alerter
if ERRORLEVEL 1 goto error
exit
:error
echo There was a problem
pause

Izpis je videti takole:

U:\>error.bat
The Alerter service is not started.

More help is available by typing NET HELPMSG 3521.

There was a problem
Press any key to continue . . .

Kode vrnitve

 - 0 = Success
 - 1 = Not Supported
 - 2 = Access Denied
 - 3 = Dependent Services Running
 - 4 = Invalid Service Control
 - 5 = Service Cannot Accept Control
 - 6 = Service Not Active
 - 7 = Service Request Timeout
 - 8 = Unknown Failure
 - 9 = Path Not Found
 - 10 = Service Already Running
 - 11 = Service Database Locked
 - 12 = Service Dependency Deleted
 - 13 = Service Dependency Failure
 - 14 = Service Disabled
 - 15 = Service Logon Failure
 - 16 = Service Marked For Deletion
 - 17 = Service No Thread
 - 18 = Status Circular Dependency
 - 19 = Status Duplicate Name
 - 20 = Status Invalid Name
 - 21 = Status Invalid Parameter 
 - 22 = Status Invalid Service Account
 - 23 = Status Service Exists
 - 24 = Service Already Paused

Urejanje 20.04.2015

Kode za vračanje: Ukaz NET ne vrača dokumentiranih kod vrnitve razreda Win32_Service (Storitev ni aktivna, časovna omejitev zahteve storitve itd.) in za številne napake preprosto vrne kodo stopnje napake 2.

Poglejte tukaj: http://ss64.com/nt/net_service.html

Komentarji (5)

Uporabite lahko ukaz NET START in nato preverite okoljsko spremenljivko ERRORLEVEL, npr.

net start [your service]
if %errorlevel% == 2 echo Could not start service.
if %errorlevel% == 0 echo Service started successfully.
echo Errorlevel: %errorlevel%

Opozorilo: To sem napisal iz glave, vendar mislim, da bo delovalo.

Komentarji (1)

Uporaba povratnih kod iz net start in net stop se mi zdi najboljša metoda. Poskusite si ogledati to: Net Start return codes.

Komentarji (1)