我想运行一个批处理脚本:
- 启动后台进程(如果重要的话,启动一个 Selenium RC 服务器);
- 等待后台进程开始监听某个端口(或者等待一段固定的时间);
- 运行一些指令;
- 停止后台进程。
我写了这个:
start java -jar "path\selenium-server.jar"
ping -n 5 127.0.0.1 >NUL
"path\Gallio.Echo.exe" "path\MyAssembly.dll"
REM now, how do I stop the background process?
答案1
您说的是“DOS”,但我想您指的是 Windows CMD shell。(毕竟,MS-DOS 不是多任务操作系统。)
好吧,好吧——这是我刚刚想出来的一个窍门。我觉得提出这个建议有点下流。
SET TASK=%RANDOM%-SELENIUM-SERVER-%RANDOM%
start "%TASK%" java -jar "path\selenium-server.jar"
ping -n 5 127.0.0.1 >NUL"
path\Gallio.Echo.exe" "path\MyAssembly.dll"
taskkill /FI "WINDOWTITLE eq %TASK%"
假设“java”命令与窗口标题关系不大,那么“START”命令会将窗口标题设置为“随机数”-SELENIUM-SERVER-“随机数”,然后 TASKKILL 将杀死任何具有该标题的窗口。
啊啊……这让我感觉很肮脏。
如果“java”确实扰乱了窗口标题,您也可以执行以下操作:
SET TASK=%RANDOM%-SELENIUM-SERVER-%RANDOM%
start "%TASK%" cmd /k start java -jar "path\selenium-server.jar"
ping -n 5 127.0.0.1 >NUL"
path\Gallio.Echo.exe" "path\MyAssembly.dll"
taskkill /T /FI "WINDOWTITLE eq %TASK%"
那真的让我感觉很肮脏。这会创建一个带有随机标题的 CMD 窗口,然后在另一个窗口中启动“java”。TASKKILL 上的“/T”将终止“FOO”窗口(即“java”窗口)的所有子进程。
我感觉不舒服。>微笑<
答案2
您可以使用 Visual Basic 脚本创建一个名为的文件来实现somehow.vbs
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cmd /c start /B java.exe ........... ", 0, False
使用 0 和“False”作为这些选项的值,脚本将启动命令java.exe
在后台运行 jar 而不显示任何窗口,也不等待它完成后再继续执行脚本的其余部分。