我在受控的xp,仅限Intranet的环境中运行,我需要从PHP应用程序启动外部进程。 (备份,报告等)
我可以让system或exec启动静默工作的进程。这是一个简单的例子
<?php exec ("echo hello > hello.txt");?>
我可以让它执行一个没有可见输出的bat文件。
我无法获得任何可以运行屏幕的程序,例如报告生成器或记事本......
<?php exec ("explorer");?>
什么都不做。或系统相同
答案 0 :(得分:18)
答案非常晚,但我自己正在研究这个问题,并发现在Windows XP上使用Apache服务器运行PHP程序确实是可能的。
现在,使用下面的代码,您可以从PHP生成UI进程。在第一个代码段中,脚本不会等待应用程序关闭;第二个片段在继续(阻止)之前等待程序关闭。
不要等待申请:
pclose(popen("start /B notepad.exe", "r"));
等待申请:
system('start notepad.exe');
这已在Windows XP上测试过。我没有在任何其他Windows版本上试过它,你的millage可能会有所不同。
旁注 在我的特定安装中,我使用了服务的“登录”选项卡中的另一个选项--Apache作为域用户运行,因此它可以使用域用户权限访问多个网络共享。仅当该服务作为本地系统运行时,该选项才可用该复选框。经过广泛的研究,我发现单个服务根本无法与当前桌面交互并利用特定用户的凭据。这是一个或另一个命题,建议的补救措施是将您的服务拆分为两个组件 - 一个使用用户帐户privs,另一个使用与桌面交互。当您谈论的服务是Web服务器时,这不太实用。这个说明可能与我的用例非常具体,但我想把它放在这里以防万一我可以在将来拯救别人的挫折感。
答案 1 :(得分:18)
另一个超级迟到的答案,但在搜索&#34; php run gui program&#34; ...
时会出现在Google上我已经能够通过制作,运行和删除计划任务在Windows 8.1中启动GUI应用程序:
shell_exec('SCHTASKS /F /Create /TN _notepad /TR "notepad.exe" /SC DAILY /RU INTERACTIVE');
shell_exec('SCHTASKS /RUN /TN "_notepad"');
shell_exec('SCHTASKS /DELETE /TN "_notepad" /F');
答案 2 :(得分:5)
您期待什么行为?调用system('notepad')
工作正常 - 它只是不显示GUI。它在后台运行,PHP耐心等待记事本关闭(只有从进程列表中删除记事本才会继续)。
如果你期望它弹出一个GUI,我相当肯定你不能这样做。 ;)一个选项可能是写出批处理脚本(file_put_contents('runme.bat', 'notepad hello.txt')
)并使该批处理脚本排队(使用Windows调度程序或Windows上的任何cron等效项)以异步方式运行(并清除自身结束)。