【问题标题】:PHP how to launch windows GUI applicationPHP如何启动Windows GUI应用程序
【发布时间】:2013-12-19 08:03:23
【问题描述】:

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

我的命令:

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

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

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

我已经尝试过以下每个命令:

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

system("start $cmd");

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

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

他们都给了我相同的结果: 它只是在后台运行应用程序,我可以通过查看 Windows 的任务管理器看到正在运行的应用程序进程,但 GUI 没有显示。

我的 PHP 版本是 5.4.3

感谢任何帮助。

【问题讨论】:

标签: php windows


【解决方案1】:

我假设 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是用户的用户名和密码

【讨论】:

  • 是否可以在没有 psexec 的情况下运行 GUI 程序?
猜你喜欢
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多