php如何启动运行的外部程序-系统和exec有问题

php如何启动运行的外部程序-系统和exec有问题,php,windows,Php,Windows,我运行在一个受控的、xp的、仅限于内部网的环境中,我需要从PHP应用程序启动外部进程。(备份、报告等) 我可以让system或exec启动静默工作的进程。这里有一个简单的例子 <?php exec ("echo hello > hello.txt");?> 我可以让它执行一个没有可见输出的bat文件 我找不到任何可以运行屏幕的程序,比如报表生成器或记事本 <?php exec ("explorer");?> 什么都不做。或者对于系统也一样您期望的是什么

我运行在一个受控的、xp的、仅限于内部网的环境中,我需要从PHP应用程序启动外部进程。(备份、报告等)

我可以让system或exec启动静默工作的进程。这里有一个简单的例子

<?php exec ("echo hello > hello.txt");?> 

我可以让它执行一个没有可见输出的bat文件

我找不到任何可以运行屏幕的程序,比如报表生成器或记事本

<?php exec ("explorer");?>


什么都不做。或者对于系统也一样

您期望的是什么行为?调用
system('notepad')
工作正常-它只是不显示GUI。它在后台运行,PHP耐心地坐在那里等待记事本自动关闭(只有当您从进程列表中删除记事本时,它才会继续)


如果您希望它弹出一个GUI,我敢肯定您不能这样做一个选项可能是编写一个批处理脚本(
文件\u put\u contents('runme.bat','notepad hello.txt')
),并让该批处理脚本排队(使用Windows scheduler或Windows上任何与cron等效的工具)以异步方式运行(并在最后清除自身)。

非常晚的回答,但我自己也在做这项工作,发现确实可以在Windows XP上使用Apache服务器从PHP运行GUI程序

  • 开始->运行,键入“services.msc”打开服务控制(其他方法也可以,这是最简单的)
  • 找到您的Apache服务(我的服务使用WampServer2.0称为“wampapache”)
  • 打开服务属性(双击或右键单击->属性)
  • 转到登录帐户,并确保标题为“允许服务与桌面交互”的复选框已选中
  • 翻回到常规选项卡,停止服务,启动服务
现在,使用下面的代码,您可以从PHP生成UI进程。在第一个代码段中,脚本不会等待应用程序关闭;第二个代码段等待程序关闭,然后继续(阻塞)

不要等待应用程序:

pclose(popen(“start/B notepad.exe”、“r”)

等待申请:

system('start notepad.exe')

这已经在Windows XP上进行了测试。我没有在任何其他Windows版本上尝试过,您的millage可能会有所不同

旁注
在我的特定安装中,我使用了服务的“登录”选项卡中的另一个选项—Apache作为域用户运行,因此它可以使用域用户权限访问多个网络共享。只有当服务作为本地系统运行时,该复选框才可用于该选项。经过广泛的研究,我发现单一的服务根本无法既与当前桌面交互,又利用特定用户的凭据。这是一个或另一个命题,建议的补救办法是将您的服务分成两个组件——一个使用用户帐户priv,另一个与桌面交互。当您谈论的服务是web服务器时,这不是很实用。这个注释可能非常具体地针对我的用例,但我想把它放在这里,以防将来我可以让其他人免于沮丧。

另一个超级迟来的答案,但这是在谷歌搜索“php运行gui程序”时出现的

通过制作、运行和删除计划任务,我已经能够在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');

我明白你的意思。你说得对记事本在没有GUI的情况下运行。(我的配置在60秒后超时。)所以我不能用PHP启动基于GUI的程序,只能求助于基于操作系统的解决方案。很高兴知道。谢谢我很好奇这是如何得到10张投票票的——它仍然只在我的设置中作为后台进程运行记事本,即使我在“与桌面交互”上有它。我正在使用Windows 7。@user24601这只在Windows XP中测试过。我会在答覆中记下这点。至于投票。。。谁在乎呢?在Windows 7上运行良好显然,此解决方案只适用于有限数量的环境。我有Windows 7,但它不工作,我也没有找到任何其他人,除了@确定谁说它确实有效。我有windows 7,并尝试了其他答案,但启动gui失败,但这一个工作完美。也一直在与Win10斗争,没有任何解决方案工作-这对outthebox有效100%+1。如何打开本地文件夹,即文件系统?非常感谢。它适用于我的AWS Windows server 2012实例。在过去的两天里,我一直在寻找这个解决方案。在Windows7中运行得很好。将参数切换为cmd.exe/c{Path to blah}和viola。工作完美。