通过批处理或者cmd文件停止并启动服务?
时间:2020-03-06 14:43:32 来源:igfitidea点击:
如何编写bat或者cmd脚本以通过错误检查可靠地停止和启动服务(或者让我知道由于某种原因它没有成功)?
解决方案
对我来说,使用net start
和net stop
的返回码似乎是最好的方法。尝试看一下:Net Start返回码。
net start [serviceName]
和
net stop [serviceName]
告诉你他们是成功还是失败。例如
U:\>net stop alerter The Alerter service is not started. More help is available by typing NET HELPMSG 3521.
如果从批处理文件运行,则可以访问返回代码的ERRORLEVEL。 0表示成功。更高的值表示失败。
作为bat文件,error.bat
:
@echo off net stop alerter if ERRORLEVEL 1 goto error exit :error echo There was a problem pause
输出看起来像这样:
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 . . .
返回码
- 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
编辑20.04.2015
返回码:
The NET command does not return the documented Win32_Service class return codes (Service Not Active,Service Request Timeout, etc) and for many errors will simply return Errorlevel 2.
在这里查看:http://ss64.com/nt/net_service.html
我们可以使用NET START命令,然后检查ERRORLEVEL环境变量,例如
net start [your service] if %errorlevel% == 2 echo Could not start service. if %errorlevel% == 0 echo Service started successfully. echo Errorlevel: %errorlevel%
免责声明:我是从头开始写的,但是我认为它会起作用。
使用" SC"(服务控制)命令,它为我们提供的不仅仅是"开始"和"停止"更多的选项。
DESCRIPTION: SC is a command line program used for communicating with the NT Service Controller and services. USAGE: sc <server> [command] [service name] ... The option <server> has the form "\ServerName" Further help on commands can be obtained by typing: "sc [command]" Commands: query-----------Queries the status for a service, or enumerates the status for types of services. queryex---------Queries the extended status for a service, or enumerates the status for types of services. start-----------Starts a service. pause-----------Sends a PAUSE control request to a service. interrogate-----Sends an INTERROGATE control request to a service. continue--------Sends a CONTINUE control request to a service. stop------------Sends a STOP request to a service. config----------Changes the configuration of a service (persistant). description-----Changes the description of a service. failure---------Changes the actions taken by a service upon failure. qc--------------Queries the configuration information for a service. qdescription----Queries the description for a service. qfailure--------Queries the actions taken by a service upon failure. delete----------Deletes a service (from the registry). create----------Creates a service. (adds it to the registry). control---------Sends a control to a service. sdshow----------Displays a service's security descriptor. sdset-----------Sets a service's security descriptor. GetDisplayName--Gets the DisplayName for a service. GetKeyName------Gets the ServiceKeyName for a service. EnumDepend------Enumerates Service Dependencies. The following commands don't require a service name: sc <server> <command> <option> boot------------(ok | bad) Indicates whether the last boot should be saved as the last-known-good boot configuration Lock------------Locks the Service Database QueryLock-------Queries the LockStatus for the SCManager Database EXAMPLE: sc start MyService
SC可以使用服务来做所有事情...启动,停止,检查,配置等...