windows - 如何通过批处理文件检查服务是否正在运行并启动它,如果它没有运行?

标签 windows windows-services batch-file scheduled-tasks

我想编写一个执行以下操作的批处理文件:

  • 检查服务是否正在运行
    • 如果正在运行,则退出批处理
    • 如果没有运行,启动服务

到目前为止,我在 Google 上搜索过的代码示例结果无法正常工作,因此我决定不发布它们。

启动服务是通过以下方式完成的:

net start "SERVICENAME"
  1. 如何检查服务是否正在运行,以及如何在批处理文件中创建 if 语句?
  2. 我有点困惑。我必须传递给网络启动的论点是什么?服务名称或其显示名称?

最佳答案

要检查服务的状态,请使用 sc query <SERVICE_NAME> .对于批处理文件中的 if block ,check the documentation .

以下代码将检查服务状态 MyServiceName并在它未运行时启动它(如果服务未运行,将执行 if block ):

for /F "tokens=3 delims=: " %%H in ('sc query "MyServiceName" ^| findstr "        STATE"') do (
  if /I "%%H" NEQ "RUNNING" (
   REM Put your code you want to execute here
   REM For example, the following line
   net start "MyServiceName"
  )
)

它做什么的解释:

  1. 查询服务的属性。
  2. 查找包含文本“STATE”的行
  3. 对该行进行标记,并取出第三个标记,即包含服务状态的标记。
  4. 根据字符串“RUNNING”测试结果状态

至于你的第二个问题,你想传递给 net start 的参数是服务名称,不是显示名称。

关于windows - 如何通过批处理文件检查服务是否正在运行并启动它,如果它没有运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3325081/

相关文章:

c# - 如何在我的 Windows 服务之前启动 MYSQL 服务

用于将 IP 地址批量转换为 CIDR 的 Bash 脚本?

authentication - 使用 AppCmd 设置特定的 IIS 7 站点?

windows - 如何告诉 Windows 批处理脚本执行下一行而不等待上一行完成执行?

c# - 使用 SystemMediaTransportControls 从其他应用程序获取当前播放的歌曲信息

windows - 如何每天自动备份postgresql数据库?

c# - C# Windows 服务的安全性

c# - 将 Excel 文件作为服务器进程读取

batch-file - 复制到所有文件夹批处理文件?

c++ - 在 C++ 中创建一个只有用户可以查看和编辑该文件的权限的文件