我很难找到这个问题的答案。我只是在程序终止后才专门在批处理文件中执行命令 - 但是,批处理文件没有启动程序。
我的问题是这个 - 我实际在我想要等待的批处理文件中启动的程序又启动另一个程序,然后启动另一个程序。这可能没有任何意义 - 但它是因为它是一个游戏发射器。这是最终幻想XIV。启动它的正常程序是ffxivboot.exe,后者又启动ffxivlauncher.exe。这是一个登录窗口,一旦您登录,它就会启动ffxiv_dx11.exe。因此,当我最初编写它以等待ffxivboot.exe时,该过程不会继续运行,因此我无法等待它。
这是我的文件(为简单起见排除了路径):
taskkill /im someprogram.exe
ffxivboot.exe
timeout /t 60 /nobreak
### ??? need to wait on ffxiv_dx11.exe to close before executing next command
someprogram.exe
我添加了一个等待的计时器,这样我就有足够的时间登录 - 因为ffxiv_dx11.exe进程在登录之后才开始。
我正在尝试做什么?很难找到答案,因为我只得到关于你何时等待从批处理文件开始的任务结束的结果。但就像我说的那样,那个推出了另一个又推出了另一个 - 所以原来的流程不再运行了。
感谢您的帮助!
答案 0 :(得分:1)
taskkill /im someprogram.exe
ffxivboot.exe
timeout /t 60 /nobreak
:repeat
::### ??? need to wait on ffxiv_dx11.exe to close before executing next command
tasklist /fi "imagename eq ffxiv_dx11.exe"|find /i "=========================" >nul 2>nul &&(
w32tm /stripchart /computer:localhost /period:10 /dataonly /samples:2 1>nul
goto :repeat
)
someprogram.exe
试试这个
答案 1 :(得分:0)
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set objEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM Win32_ProcessStopTrace")
Do
Set objReceivedEvent = objEvents.NextEvent
msgbox objReceivedEvent.ProcessName
If lcase(objReceivedEvent.ProcessName) = lcase("Notepad.exe") then
Msgbox "Process exited with exit code " & objReceivedEvent.ExitStatus
WshShell.Run "c:\Windows\notepad.exe", 1, false
End If
Loop
这是一个需要运行提升的vbs文件。它等待任何程序退出并检查它是否是记事本并重新启动它。
键入提升的命令提示符taskkill /f /I'm wscript.exe
以停止它。