【问题标题】:How to get a VBS script to start a service if it is stopped, with no window?如果服务停止且没有窗口,如何获取 VBS 脚本来启动服务?
【发布时间】:2014-06-05 17:20:17
【问题描述】:

我有一个启动 .vbs 文件的计划任务,它启动一个没有窗口的批处理文件,检查服务是否正在运行,如果没有,则启动它。我有一个 .vbs 启动批处理文件的原因是批处理文件没有弹出窗口。我遇到的问题是,当我通过 .vbs 运行批处理时访问被拒绝,所以我想在 .vbs 脚本中运行整个系统以检查服务是否已启动或正在运行,如果没有启动它。此外,我使用 schtasks 以 /RL Highest 运行 .vbs,因此我不会拒绝访问,但是当 .vbs 启动批处理文件时,批处理文件没有权限并被拒绝访问。

我输入的定时任务命令:

    schtasks /CREATE /TN "OpenTunnel" /TR "C:\BTools\OpenTunnel\Invisable_OpenTunnel.vbs" /sc minute /mo 10 /RU ***** /RP ***** /RL HIGHEST

这是运行并检查服务状态的批处理文件。

for /F "tokens=3 delims=: " %%H in ('sc query "Hamachi2Svc" ^| findstr "        STATE"') do (
  if /I "%%H" NEQ "RUNNING" (
   net start "Hamachi2Svc"
  )
)

这里是 .vbs 的代码,它在没有窗口的情况下启动批处理:

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "opentunnel.bat" & Chr(34),0
Set WinScriptHost = Nothing

因此,如果我以管理员身份运行批处理,它会起作用,但是有没有办法让 .vbs 每 10 分钟运行一次,它会执行与批处理文件类似的操作?毕竟,.vbs 文件是最好的,我可以授予它 /RL 最高的权限,这应该可以。

提前致谢 =)

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    为此使用 WMI(特别是 Win32_Service 类):

    Set wmi = GetObject("winmgmts://./root/cimv2")
    
    qry = "SELECT * FROM Win32_Service WHERE Name = 'Hamachi2Svc'"
    For Each svc In wmi.ExecQuery(qry)
      If svc.State <> "Running" Then svc.StartService
    Next
    

    【讨论】:

      猜你喜欢
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 2013-06-10
      • 2011-12-27
      • 2012-06-08
      • 2011-05-26
      相关资源
      最近更新 更多