但是,有时候可能需要让PHP程序自动执行,虽然说能通过添加php.exe文件作为启动项,再配合参数进行执行,但是,这种方式需要管理员登录桌面才行,有没有一种方法能开机自动运行呢,比如定时执行特定任务。
php.exe文件本身也是无法通过服务的方式启动的,php-cgi.exe也不行,那么,如果能让它们以服务的方式启动,那问题就能解决了。这里需要用到srvany.exe,通过将srvany.exe以服务的方式启动,再通过srvany.exe调用php-cgi.exe,问题就能得到解决。
接下来介绍一下具体的操作方法。
下载srvany.exe,解压到c:\windows\srvany\srvany.exe
安装 instsrv ServiceName C:\Windows\srvany\srvany.exe
卸载 instsrv ServiceName remove
安装完毕后,我们需要对srvany.exe进行配置,以便于能够加载我们指定的程序,配置的方法是,开始 - 运行 - regedit,打开注册表,定位到下面的路径。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName
如果该服务名下没有Parameters项目,则对服务名称项目右击新建项,名称为Parameters,然后定位到Parameters项,新建以下几个字符串值。
名称 Application 值为你要作为服务运行的程序地址。
名称 AppDirectory 值为你要作为服务运行的程序所在文件夹路径。
名称 AppParameters 值为你要作为服务运行的程序启动所需要的参数。
如何需要同时运行多个PHP文件,可以考虑使用vbs脚本启动多个php-cgi.exe进程以解析多个文件,这样就不用创建多个服务了。
如以下示例:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ChatServer\parameters]
"AppDirectory"="D:\\www\\chat\\"
"Application"="D:\\www\\chat\\wscript.exe"
"AppParameters"="D:\\www\\chat\\start_for_win.vbs"
至于start_for_win.vbs,它的作用是调用php-cgi.exe解析多个PHP文件,如下:
set objShell = CreateObject("Wscript.Shell")
objShell.Run "D:\PHP7\php.exe D:\www\chat\Applications\YourApp\start_register.php",0
objShell.Run "D:\PHP7\php.exe D:\www\chat\Applications\YourApp\start_gateway.php",0
objShell.Run "D:\PHP7\php.exe D:\www\chat\Applications\YourApp\start_businessworker.php",0