如果服务正在运行,如何在系统启动后检测,如果运行则启动我的应用程序?

时间:2015-06-18 07:50:46

标签: windows vbscript

在VBScript中,如果特定服务名称已启动或正在运行,它是否可以查询?如果它运行然后最后执行我的应用程序。所以这就是我想要准备的流程:

  1. 系统已启动
  2. 执行Windows 8.1启动脚本(VBS)
  3. VBScript现在等待并继续检查服务名称“NGINX”是否已经启动或运行。

    1. 如果正在运行,则执行notepad.exe
    2. 如果没有运行,则启动服务“NGINX”并确保其现在为“RUNNING”。如果现在“RUNNING”,那么最后执行notepad.exe
  4. VBScript可以实现吗?

    示例:此行6应仅在服务NGINX正在运行时执行,否则永远不应执行该行。

    Option Explicit
    Dim ws
    set ws = CreateObject("wscript.shell")
    Dim a
    a = "C:\Program Files (x86)\abcd\kiosk.jar"
    ws.run "java.exe -cp " & chr(34) & a & chr(34) & " kiosk", 0, False
    

2 个答案:

答案 0 :(得分:1)

如果你想在系统启动后自动启动nginx,你应该install it as a service。您可以对Win32_Service类使用WMI查询来检查服务是否正在运行,如果不是,则启动它:

Set wmi = GetObject("winmgmts.//./root/cimv2")

qry = "SELECT * FROM Win32_Service WHERE Name = 'nginx' AND State <> 'Running'"
For Each svc In wmi.ExecQuery(qry)
  svc.StartService
Next

要检查服务是否正在运行并运行其他程序,如果是,您可以执行以下操作:

isRunning = False
qry = "SELECT * FROM Win32_Service WHERE Name = 'nginx' AND State = 'Running'"
For Each svc In wmi.ExecQuery(qry)
  isRunning = True
Next

If isRunning Then
  CreateObject("WScript.Shell").Run "notepad.exe", 0
End If

答案 1 :(得分:1)

无需将其作为服务安装。使用计划任务在启动,登录或其他任何时间启动它。 我喜欢WMI方法,这就是我想要的,但你也可以执行Net Start,读取每一行输出,然后使用If Instr来检查你的服务名称。如果它返回True,则启动您的服务。如果没有,那么它没有。好的一点是,您已经为Wscript.shell创建了连接,因此再次使用Net Start启动服务将是一件简单的事情。 http://www.codeproject.com/Tips/507798/Differences-between-Run-and-Exec-VBScript