【问题标题】:Wait for program to complete等待程序完成
【发布时间】:2017-10-30 03:11:37
【问题描述】:

为了监控带宽使用情况而不是在启动时不必要地加载程序,我想执行dumeter.exe然后firefox.exe。当我关闭firefox时它应该杀死dumeter。我使用以下代码启动

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "c:\progra~1\dumeter\dumeter.exe"
WshShell.Run "c:\progra~1\mozill~1\firefox.exe

只有在firefox关闭时才需要运行taskkill。尝试使用bat文件但有时dumeter会自行启动和关闭而不等待。

 WshShell.Run "taskkill /f /im dumeter.exe"  
 Set WshShell = Nothing

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    您可以通过订阅适当的 WMI 事件来等待进程结束。这是一个例子:

    strComputer = "."
    Set oWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    
    ''# Create an event query to be notified within 5 seconds when Firefox is closed
    Set colEvents = oWMI.ExecNotificationQuery _
        ("SELECT * FROM __InstanceDeletionEvent WITHIN 5 " _
         & "WHERE TargetInstance ISA 'Win32_Process' " _
         & "AND TargetInstance.Name = 'firefox.exe'")
    
    ''# Wait until Firefox is closed
    Set oEvent = colEvents.NextEvent
    

    更多信息在这里:How Can I Start a Process and Then Wait For the Process to End Before Terminating the Script?

    【讨论】:

      【解决方案2】:
      Option Explicit
      
      Const PROC_NAME = "<Process_You_Want_to_Check>"
      Const SLEEP_INTERVAL_MS = 5000 '5 secs
      
      Dim objWMIService
      Dim colProcesses, objProcess, inteproc
      
      Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
      
      inteproc = -1 'set in unknown state
      
      Do Until inteproc = 0
      
      Set colProcesses = objWMIService.ExecQuery(_
          "Select * from Win32_Process where Name='" & PROC_NAME & "'")
          inteproc = colProcesses.count
      
      If inteproc > 0 then
      WSCRIPT.ECHO "Process " & PROC_NAME & " is still runing, wait for " & SLEEP_INTERVAL_MS / 1000 & " seconds"
      WScript.Sleep(SLEEP_INTERVAL_MS)
      
      else
          wscript.echo "Process " & PROC_NAME & " Finished. Continue running scripts"
      
      End If
      
      Loop
      

      【讨论】:

      • 欢迎来到 Stack Overflow - 很高兴有你。请阅读我如何提出一个好问题? stackoverflow.com/help/how-to-ask 以及如何创建一个最小、完整和可验证的示例,以帮助将 Stack Overflows 内容保持在尽可能高的水平,并增加获得适当答案的机会。 stackoverflow.com/help/mcve
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 2010-11-06
      • 1970-01-01
      相关资源
      最近更新 更多