PHP如何启动Windows GUI应用程序

Tel*_*yen 5 php windows

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

我的命令:

$cmd = 'E:\soft\Notepad++\notepad++.exe E:\text.php';
Run Code Online (Sandbox Code Playgroud)

我可以通过Window Command Line工具运行该命令并且它工作正常,记事本++启动并打开带有预期内容的GUI.我想在php中这样做

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

我尝试过以下每个命令:

pclose(popen("start /B $cmd", "r"));
Run Code Online (Sandbox Code Playgroud)

要么

system("start $cmd");
Run Code Online (Sandbox Code Playgroud)

要么

exec("C:\\windows\\system32\\cmd.exe /c START " . $cmd);
Run Code Online (Sandbox Code Playgroud)

要么

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

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

我的PHP版本是5.4.3

任何帮助表示赞赏.

小智 3

我假设 PHP 运行在 Apache 中,而 Apache 又是一项服务。

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

有关更多详细信息,请参阅此答案: 启动进程的服务不会显示 GUI C#

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

  1. 创建一个自定义 C++(或等效)应用程序,该应用程序将为给定用户创建目标 GUI 应用程序。答案Windows 服务如何执行 GUI 应用程序?CreateProcessAsUser()对此进行了解释。此方法需要指定用户名和密码。

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

  3. 使用 Microsoft 的PSEXEC 实用程序在 GUI 中启动该进程。然而,这将需要用户名、密码和会话 ID。

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

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

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