【发布时间】:2016-04-01 23:08:52
【问题描述】:
正如标题所说,我根本无法让我的 PHP 代码通过 exec() 在服务器上启动程序。
这样的简单命令可以正常工作:
php.exe -r exec('mspaint.exe');
但如果我从这样的网页尝试它,它就会挂起:
<?php
if (isset($_POST['test'])) {
exec('C:\Windows\System32\mspaint.exe 2>&1', $output);
print_r($output);
}
?>
<html>
<body>
<form method="post">
<input name="test" type="submit" value="test!" />
</form>
</body>
</html>
我只能在 echo 等其他命令上得到错误或输出,但尝试启动 .exe 只会挂起网页。我确实注意到 mspaint.exe 的进程显示在任务管理器中,但窗口本身从未弹出。
任何帮助将不胜感激。
【问题讨论】:
-
弹出Web服务器的窗口。 Web 服务器没有像您一样运行。这就是我们从不这样做的原因。
-
不,不会为 Web 服务器弹出窗口。我远程桌面进入它,并没有弹出窗口。
-
你是远程的,而不是网络服务器。
-
我感觉这与 Windows 上的权限有关。我按照here提到的每一步,给cmd.exe权限,允许lighttpd服务与桌面交互,使用psexec,但是页面还是挂了!
-
那是因为你不应该那样做。 lighthttpd 服务器作为系统服务运行,系统服务启动的进程是非交互的,即你看不到它们。这是设计使然,这是应该发生的事情。请注意,“与桌面交互”选项从 Windows Vista / Server 2008 开始已被弃用,除非您还启用“交互服务检测”服务(这是为了向后兼容),否则该选项将不再有效。