PHP如何启动Windows GUI应用程序

时间:2013-12-19 08:03:23

标签: php windows

对不起,如果这似乎是一个愚蠢的问题。我无法以任何方式通过PHP启动Windows GUI应用程序。 我尝试过从类似问题中找到的任何解决方法,但它们根本不起作用。

我的命令:

$cmd = 'E:\soft\Notepad++\notepad++.exe E:\text.php';

我可以通过Window Command Line工具运行该命令,它运行正常,启动了notepad ++并打开了带有预期内容的GUI。我想在php中做到这一点

我已打开Windows服务并为“wampapache”服务设置选项“允许服务与桌面交互”(已选中)并重新启动它。

我尝试过以下每个命令:

pclose(popen("start /B $cmd", "r"));

OR

system("start $cmd");

OR

exec("C:\\windows\\system32\\cmd.exe /c START " . $cmd);

OR

$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run($cmd, 0,false);

所有这些都给了我相同的结果: 它只是运行应用程序在背景中,我可以看到通过查看Windows的任务管理器运行的应用程序进程,但GUI不显示。

我的PHP版本是5.4.3

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

我认为PHP在Apache中运行,而Apache又是一种服务。

现在从服务启动任何应用程序都不会显示其GUI,因为服务在单独的会话中运行,不允许与用户桌面进行交互。

有关详细信息,请参阅此答案: Service starting a process wont show GUI C#

然而,可以有其他方法来实现这一目标。

  1. 创建一个自定义C ++(或等效的)应用程序,它将为给定用户创建目标GUI应用程序。答案How can a Windows service execute a GUI application?解释了CreateProcessAsUser()。此方法将要求指定用户名和密码。

  2. 创建自定义客户端 - 服务器类应用程序。服务器部分将始终在需要显示GUI的用户模式下运行。客户端将从PHP调用。调用客户端时,它将使用类似IPC的事件向服务器部分发出信号。服务器可以依次启动GUI应用程序。

  3. 使用Microsoft的PSEXEC utility在GUI中启动该过程。但是,这需要用户名,密码和会话ID。

    psexec.exe \\REMOTE -u USER -p PASS -i SESSION -d C:\Windows\Notepad.exe

    SESSION是会话ID(使用任务管理器 - >用户标签查看您的会话ID)

    USER,PASS是用户的用户名和密码