如何从PHP运行Windows窗体应用程序


How to run a Windows Forms Application from PHP

我正在尝试运行一个自定义的Windows窗体应用程序,该应用程序接受来自PHP脚本的命令行参数,但到目前为止还没有成功。如果没有提供参数,此程序将加载其交互式GUI,否则它将只处理信息,然后以状态0退出。

首先,我尝试使用exec()函数,页面会挂起大约两分钟,然后浏览器会抛出"No data received"错误。所以我开始阅读exec、popen、proc_open、system、passthrough和shell_exec函数。我尝试使用exec、system和shell_exec来运行程序,但没有成功。

然后我发现可能存在权限问题,因为实际尝试运行该程序的用户是我的web服务器(Apache/2.2.22(Win32)PHP/55.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>

通过将我的项目转换为控制台应用程序修复了这个问题,PHP能够以这种方式正确执行它。