在启动wamp之前,您如何检查现有的.pid?
我正在寻找一种方法来确保在启动它之前它尚未在其他某台机器上运行。在启动wamp之前,您如何检查现有的.pid?
我想到的最好办法是检查MySQL文件夹中现有的.pid。
最简单的事情就是修改快捷键,但我认为这不可能。 所以我需要做一些事情。
- 弄清楚其中的MySQL存储
- 检查的.pid文件是否存在,如果发现该文件抛出一个错误与文件减去扩展名,说明这样给他们一个暗示什么机器正在运行它。
- 如果不存在,那么继续前进,像通常那样使用快捷方式启动wamp。
DONE。
如果需要,我们可以询问用户ONCE在哪里存储wamp,然后它只是在%wamp%\ bin \ mysql 我试过这个脚本,但它没有正确执行,它打开2 cmd的窗口,只是抛出一个暂停。 感谢 熊
@echo off
cd "C:\google_drive\server\wamp64"
forfiles /p bin\mysql\ /m *.pid /s /c "cmd /c goto error"
start wampmanager.exe
exit
:error
echo I'm sorry, Mysql is already running so I can't start WAMP for you. Shutdown WAMP on @FNAME before running again."
pause
您可以检查与文件的存在:
if exist "C:\google_drive\server\wamp64\bin\mysql\*.pid
但按你的描述,我想,可能有不止一个.pid
文件,所以有一个更好的选择:
setlocal enabledelayedexpansion
set "running="
for %%a in ("C:\google_drive\server\wamp64\bin\mysql\*.pid") do set "running=!running! %%~na,"
if "%running%" neq "" (
echo I'm sorry, Mysql is already running so I can't start WAMP for you.
echo Shutdown WAMP on: %running% before running again.
pause
goto :eof
)
start wampmanager.exe
“setlocal”是做什么的?它有什么好处? 我喜欢你的代码,它创建一个弹出? 这是我的工作,但也许你的版本更优雅。 '@echo off forfiles/p bin \ mysql \/m * .pid/s/c“cmd/c msg */time:0对不起,Mysql已经运行,所以我无法启动WAMP 。再次运行之前,关闭@FNAME中的WAMP。“ &&退出 start wampmanager.exe' 对不起,乱码我仍然无法弄清楚如何在像你们这样的好块中获得它。 –
我们需要[延迟扩展](https://stackoverflow.com/a/30284028/2152082)来建立'for'循环中的服务器列表。所以[setlocal](https://ss64.com/nt/setlocal.html)是必要的。除此之外,它还有一个很好的效果:'setlocal'后面的所有声明变量都保持为local(不是永久的,只要批处理文件结束,它们就会消失)。没有办法在评论中正确地格式化代码。适用于命令或简短的行,但对于较长的代码片段来说很麻烦。 – Stephan
tyvm先生。你一直在帮助很大。现在我要做的就是让inno安装程序正常工作。 –
我已经完成了很多工作,现在可以工作,但我还没有想出如何获得现有Wamp安装的注册表键值,以便我可以使用其安装路径。我想出的是... '@echo off forfiles/p bin \ mysql \/m * .pid/s/c“cmd/c msg */time:0对不起,Mysql已经在运行我无法为您启动WAMP。在再次运行之前关闭@FNAME中的WAMP。“ &&退出 启动wampmanager.exe' 这需要bat文件位于wamps目录中。 (对不起,乱码我不知道如何使它成为块) –
是wampmanager服务?如果是这样,那么使用sc.exe命令有很多检查/操作选项。 – theglossy1
'forfiles'启动一个新的命令过程。来自该新进程的'GOTO'不起作用(没有参考/跳转目的地)。如果存在“C:\ google_drive \ server \ wamp64 \ bin \ mysql \ *。pid”'那么怎么办呢? – Stephan