仅当批次尚未运行时才启动XAMPP

时间:2012-05-21 16:50:53

标签: powershell batch-file window xampp

我正在为我公司软件的新部署编写批处理。这是我到目前为止所拥有的......

wscript.exe "invisible.vbs" "apache_start.bat" /wait
wscript.exe "invisible.vbs" "mysql_start.bat" /wait
"C:\Program Files\Internet Explorer\iexplore.exe" http://localhost

所以你可以看到,这个脚本应该启动apache,然后启动mysql然后用IE打开默认页面。

问题是如果用户运行此脚本两次,它运行apache和mysql两次并加载两个单独的实例。我需要的解决方案是检查流程是否已经运行的方法,如果没有,则运行两个wscript命令。我对shell绝对可怕,所以请尽量给出具体的回复!我是一名软件工程师,而不是系统管理员。谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

作为一名软件工程师,我认为你可以在一些系统管理员上编写脚本......

使用PowerShell可以轻松实现这一目标。使用以下模板执行服务 - 您需要使用它两次,然后按照上面的步骤启动IE。

If ((Get-Process mysqlprocessname.exe)) {Write-Host Skipping MySQL}
Else { Start-Process ...}

您需要花几分钟时间研究使用PowerShell启动流程的最佳方法。此外,您可能希望将Start-Process传递给Out-Null,以便脚本等待启动IE和Apache。

其他人可能希望以更简单的方式从批处理文件中获取信息。

答案 1 :(得分:0)

对于XAMPP,在apache / bin文件夹中有一个pv.exe文件,XAMPP使用该文件来查看服务是否正在运行。请查看WorldDrknss在此主题中的回答,获取一些很好的信息:http://www.apachefriends.org/f/viewtopic.php?p=80047

解决问题的代码是将mysql_start.bat文件修改为:

@echo off 
apache\bin\pv mysqld.exe %1 >nul 
if ERRORLEVEL 1 goto Process_NotFound 
echo MySQL is running 
goto END 
:Process_NotFound 
echo Process %1 is not running 
mysql\bin\mysqld.exe --defaults-file=mysql\bin\my.ini --standalone --console
goto finish 
:finish

这将检查mysqld.exe是否正在运行。如果是的话,那只是回声。如果没有,它会启动服务。