我运行的是 Windows 10。在它上面,我不断运行 CLI PHP 脚本。我的 PHP 安装目录是C:\PHP
。
每当有新版本的 PHP(稳定分支)时,我的脚本都会检测到,从 PHP 网站下载新的 ZIP 文件,检查校验和,检查 VirusTotal,将存档提取到C:\PHP-new
,打开 WinMerge,在差异视图中使用C:\PHP\php.ini
和C:\PHP-new\php.ini
文件,允许我进行必要的更新/修改,并通知我。
最后,我运行一个脚本来安全地关闭我的 CLI PHP 系统,然后删除C:\PHP
目录并重命名C:\PHP-new
为C:\PHP
。然后我再次启动我的系统,现在它正在运行新的 PHP 版本。
尽管我已经将大部分工作自动化了,但仍然没有完全自动化。因此,我最近一直在尝试让它也完成最后一步。
因此,我让系统向所有循环脚本发出信号以关闭,当只剩下更新脚本时,我尝试让其删除目录C:\PHP
并重命名C:\PHP-new
,但这(如预期的那样)没有完全起作用;它开始删除文件,但一旦遇到正在由执行此工作的 CLI PHP 脚本主动“使用”的 DLL,就会失败。权限被拒绝等。
我的问题是:我的 CLI PHP 脚本是否有任何逻辑方法可以做到这一点?也许我可以进入某种特殊的“临时模式”,专门用于允许这种事情?
如果不可能的话,那就意味着我无法完全自动化 PHP 的更新,不是吗?
在你告诉我一些第三方软件包管理器(如“Chocolatey”)之前,我不喜欢这样的东西,有几个重要的原因。如果非要说的话,我本来希望 PHP 本身能够自我更新,但我意识到,由于配置文件步骤,它至少会变得有问题,无论如何都必须手动进行。
答案1
Windows 不允许您删除正在使用的可执行映像 - 但允许您移动/重命名它们。
应该可以将 C:\PHP 重命名为 C:\PHP-old,然后将 C:\PHP-new 重命名为正确的位置。之后,使用新安装的 php.exe 生成一个单独的“清理”脚本,它将能够删除不再使用的 C:\PHP-old。