我怎么能脚本一个蝙蝠或cmd停止和启动一个服务可靠的错误检查(或让我知道它不成功的原因)?
当前回答
我没有发现上面的答案提供了一个令人满意的解决方案,所以我写了下面的批处理脚本…
:loop
net stop tomcat8
sc query tomcat8 | find "STOPPED"
if errorlevel 1 (
timeout 1
goto loop
)
:loop2
net start tomcat8
sc query tomcat8 | find "RUNNING"
if errorlevel 1 (
timeout 1
goto loop2
)
它一直运行net stop直到服务状态为STOPPED,只有在状态为STOPPED后才运行net start。如果一个服务需要很长时间才能停止,网络停止可能会终止失败。如果由于某种原因,服务没有成功启动,它将继续尝试启动服务,直到状态为RUNNING。
其他回答
SC 净停止/启动 PsService WMIC Powershell还有易于使用的选项
SC和NET已经作为答案给出了。PsService增加了一些简洁的功能,但需要从微软下载。
但我最喜欢的方式是WMIC,因为WQL语法提供了一种强大的方式,可以用一行管理多个服务(WMI对象也可以通过powershell/vbscript/jscript/c#使用)。
最简单的使用方法:
wmic service MyService call StartService
wmic service MyService call StopService
以及WQL的例子
wmic service where "name like '%%32Time%%' and ErrorControl='Normal'" call StartService
这将启动名称包含32Time并具有正常错误控制的所有服务。
这里有一些你可以使用的方法。
:
wmic service get /FORMAT:VALUE
您可以查看有关服务的可用信息。
我只是使用上面Jonas的例子,创建了一个完整的0到24个错误级别的列表。另一篇文章是正确的,网络启动和网络停止只使用errorlevel 0表示成功,2表示失败。
但这对我来说很管用:
net stop postgresql-9.1
if %errorlevel% == 2 echo Access Denied - Could not stop service
if %errorlevel% == 0 echo Service stopped successfully
echo Errorlevel: %errorlevel%
将停止改为开始并反向工作。
用它可以启动需要服务的服务或程序
@echo
taskkill /im service.exe /f
taskkill /im service.exe /f
set "reply=y"
set /p "reply=Restart service? [y|n]: "
if /i not "%reply%" == "y" goto :eof
cd "C:\Users\user\Desktop"
start service.lnk
sc start service
eof
exit
我正在用c#写一个windows服务,停止/卸载/构建/安装/启动循环太累人了。写了一个小脚本,命名为reploy.bat,并放在我的Visual Studio输出目录中(其中包含构建的可执行服务)来自动化循环。
只要设置这3个变量
servicename:显示在Windows服务控制面板(services.msc)
Slndir:包含解决方案(.sln)文件的文件夹(不是完整路径)
Binpath:从构建到服务可执行文件的完整路径(不是文件夹路径)
注意:需要从Visual Studio开发人员命令行运行msbuild命令才能工作。
SET servicename="My Amazing Service"
SET slndir="C:dir\that\contains\sln\file"
SET binpath="C:path\to\service.exe"
SET currdir=%cd%
call net stop %servicename%
call sc delete %servicename%
cd %slndir%
call msbuild
cd %bindir%
call sc create %servicename% binpath=%binpath%
call net start %servicename%
cd %currdir%
也许这能帮助到某些人:)
或者您可以使用以下CMD启动远程服务:sc \\<computer> start <service>
推荐文章
- 如何验证批处理文件中是否存在一个文件?
- 如何循环通过文件匹配通配符在批处理文件
- 异步运行Windows批处理文件命令
- 我怎么能显示线在公共(反向差异)?
- XAMPP -端口80被PID 4的“无法打开进程”使用!12
- Git显示“警告:永久添加到已知主机列表”
- 为什么git在Windows下记不住我的密码
- Git克隆/拉不断冻结在“存储密钥在缓存?”
- 如何在文本文件中替换${}占位符?
- 如何在批处理文件中请求管理员访问
- 有没有替换Windows (Visual C)的unistd.h ?
- 如何在Mac OS Lion上从命令行启动MySQL服务器?
- 从Windows批处理文件设置系统环境变量?
- 在批处理文件中处理子字符串的最佳方法是什么?
- 在Sublime Text 2中使用Ctrl+D进行多个选择时,我如何跳过匹配?