【发布时间】:2013-11-21 19:57:30
【问题描述】:
我正在尝试运行一个自定义 Windows 窗体应用程序,该应用程序接受来自 PHP 脚本的命令行参数,但到目前为止我还没有成功。 如果没有提供参数,这个程序会加载它的交互式 GUI,否则它只会处理信息,然后以状态 0 退出。
首先,我尝试使用 exec() 函数,页面会挂起大约两分钟,然后浏览器会抛出“未收到数据”错误。 所以我开始阅读 exec、popen、proc_open、system、passthru 和 shell_exec 函数。我尝试使用 exec、system 和 shell_exec 使程序运行,但无济于事。
然后我发现可能存在权限问题,因为实际尝试运行该程序的用户是我的 Web 服务器 (Apache/2.2.22 (Win32) PHP/5.3.14) 所以我访问了 Apache 服务的属性并让它以我自己的用户身份登录,重新启动服务并设法使用 exec 函数获取返回值。
我还发现,为了防止页面挂起,我应该将程序设置为在后台运行,但是我需要等待程序的响应才能让用户知道它已经完成了工作。
现在的问题是我似乎只能在没有参数的情况下运行它。它实际上并没有加载它的 GUI,它只返回它的状态 0,所以我不确定它是否真的运行了。如果我设置了一个参数,那么页面就会挂起,并且我会得到一个不会在任务管理器中自行关闭的 cmd.exe 进程。
PHP 代码:
$path = 'start /b "D:/Path/to/program.exe" argument';
$output = array();
$returnVal;
exec($path, $output, $returnVal);
我怎样才能让这个程序运行?
更新:
如果我在没有参数的情况下运行程序并将> output.txt 附加到命令中,我会在 output.txt 文件中得到以下内容:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
D:\WPrograms32\Apache2.2\htdocs>
【问题讨论】: