无法使用 setx PATH 和 php -S 命令通过 HTA 在 Win 上启动 PHP
Can't start PHP on Win via HTA with setx PATH and php -S commands
我创建了 HTA 文件以在 Windows 上安装和启动 PHP。如果 my_app_folder/php
文件夹已经存在某些版本的 PHP,通过 HTA 文件我们只有 1) 设置 Win PATH
变量和 PHP 文件夹的路径, 2) 转到 /my_app_folder
,其中 index.php
和 3) 运行 php -S
CMD 命令。
下面是我测试 HTA 文件的代码:
<script>
var objUserInfo = new ActiveXObject('WScript.network');
var pathToUserFolder = 'C:\Users\'+objUserInfo.UserName+'\';
var WShell = new ActiveXObject('WScript.Shell');
WShell.Run('cmd /c setx PATH '+pathToUserFolder+'my_app_folder\php',0,true);
WShell.CurrentDirectory = pathToUserFolder+'my_app_folder';
WShell.Run('cmd /c php -S localhost:80',0,false);
setTimeout(function() {
WShell.Run('chrome -url http://localhost:80', 0, false);
}, 17000);
</script>
如果我打开这个 HTA 文件,PATH
变量被成功添加,但是 php.exe
进程没有被 运行ned。但是,如果 PATH
变量已经存在并且我打开文件,则 php.exe
进程正在 运行ned。
ps。我注意到 PHP 服务器在我们 运行 执行 php -S
命令后至少 17 秒准备就绪,所以正如您所见,我在打开浏览器之前使用 setTimeout()
然后localhost
地址。
好的,如果我们在 PATH 变量方面遇到一些问题,在 CMD 命令中使用 php.exe
的完整路径就足够了:
WShell.Run('cmd /c C:\my_app_folder\php\php.exe -S localhost:80',0,false);
我创建了 HTA 文件以在 Windows 上安装和启动 PHP。如果 my_app_folder/php
文件夹已经存在某些版本的 PHP,通过 HTA 文件我们只有 1) 设置 Win PATH
变量和 PHP 文件夹的路径, 2) 转到 /my_app_folder
,其中 index.php
和 3) 运行 php -S
CMD 命令。
下面是我测试 HTA 文件的代码:
<script>
var objUserInfo = new ActiveXObject('WScript.network');
var pathToUserFolder = 'C:\Users\'+objUserInfo.UserName+'\';
var WShell = new ActiveXObject('WScript.Shell');
WShell.Run('cmd /c setx PATH '+pathToUserFolder+'my_app_folder\php',0,true);
WShell.CurrentDirectory = pathToUserFolder+'my_app_folder';
WShell.Run('cmd /c php -S localhost:80',0,false);
setTimeout(function() {
WShell.Run('chrome -url http://localhost:80', 0, false);
}, 17000);
</script>
如果我打开这个 HTA 文件,PATH
变量被成功添加,但是 php.exe
进程没有被 运行ned。但是,如果 PATH
变量已经存在并且我打开文件,则 php.exe
进程正在 运行ned。
ps。我注意到 PHP 服务器在我们 运行 执行 php -S
命令后至少 17 秒准备就绪,所以正如您所见,我在打开浏览器之前使用 setTimeout()
然后localhost
地址。
好的,如果我们在 PATH 变量方面遇到一些问题,在 CMD 命令中使用 php.exe
的完整路径就足够了:
WShell.Run('cmd /c C:\my_app_folder\php\php.exe -S localhost:80',0,false);