PHP - есть ли шанс запустить программу с графическим интерфейсом через exec ()?

мне нужно запустить веб-браузер (chrome-firefox ..) с помощью exec

я пытался сделать это с помощью файла bat (этот метод упоминается здесь)

C:\Users\farok\AppData\Local\Google\Chrome\Application\chrome.exe www.google.com

когда я открываю файл с помощью windows, все идет хорошо, но ничего не происходит, когда я открываю его с помощью exec

и я попытался сделать это, используя файл jar с помощью класса BrowserControl

BrowserControl.displayURL("www.google.com");

и то же самое, что и bat-файл, есть ли способ сделать это?

примечание: я использую wamp 2.2, Apache 2.0, PHP V5.3.8

Обновить

я обнаружил, что после запуска этой команды

exec('"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" "www.google.com" 2> errors.txt');

Доза Firefox открыта в диспетчере задач, но интерфейс браузера не виден .. есть идеи?


person Farok Ojil    schedule 30.06.2012    source источник
comment
Есть ли причина, по которой вам нужно запустить браузер? ЕСЛИ вы даете представление о том, что вы пытаетесь сделать, может быть лучший способ.   -  person Kris    schedule 30.06.2012
comment
Для этого вам не нужен сервер Apache (или любой другой веб-сервер). На самом деле запустить его через сервер не получится, потому что вывод должен быть отправлен не в браузер, а в функции визуального интерфейса, которые рисуют что-то на дисплее.   -  person Mihai Stancu    schedule 30.06.2012
comment
@Kris, я пытаюсь сделать это stackoverflow.com/questions/11246700/   -  person Farok Ojil    schedule 30.06.2012
comment
@FarokOjil - В этой теме у вас есть предложения; phantomjs, используя java или даже JSP. Просто из интереса, почему вы задали вопрос только для того, чтобы проигнорировать его ответы? ответ Java на самом деле был очень простым, и вы указали Java как язык вы могли бы работать с.   -  person Fergus In London    schedule 01.07.2012


Ответы (5)


Я не эксперт по Windows, но я думаю, вам нужно разрешить desktop interaction, что непросто/возможно, если родительский процесс работает как служба Windows. php запускается внутри процесса apache, который у вас, вероятно, работает как служба.

Попробуйте остановить службу и вручную запустить httpd.exe, а затем следующее работает для меня на win7, когда я запрашиваю скрипт через URL-адрес локального хоста через apache. мой php взаимодействует с apache через старый добрый cgi.

exec('"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" "http://stackoverflow.com/"');

обратите внимание на использование мною кавычек.

person goat    schedule 30.06.2012
comment
попробуйте выполнить скрипт из командной строки, используя php cli. Честно говоря, вы должны просто отправлять эти команды какому-то внешнему процессу-демону, который запускает браузер — вам не следует пытаться делать подобные вещи в процессах веб-сервера. - person goat; 30.06.2012
comment
как я могу использовать внешний процесс демона, можете ли вы привести пример? - person Farok Ojil; 30.06.2012
comment
Нет, извините, я не буду приводить пример. Вы можете провести небольшое исследование по этому поводу. - person goat; 30.06.2012
comment
+1@rambocoder за то, что посоветовал кому-то провести исследование; Вы ничему не научитесь, если вас будут кормить с ложечки! - person Fergus In London; 01.07.2012

так что это еще один хороший обходной путь, который я нашел здесь, идея состоит в том, чтобы создать планировщик, который выполняет нужную программу и вызывает ее используя команду

надеюсь, что это поможет:

shell_exec('SCHTASKS /F /Create /TN _notepad /TR "notepad.exe" /SC DAILY /RU INTERACTIVE');
shell_exec('SCHTASKS /RUN /TN "_notepad"');
shell_exec('SCHTASKS /DELETE /TN "_notepad" /F');
person Baim Wrong    schedule 15.07.2017
comment
хорошие идеи! любые идеи, не зависящие от функций операционной системы - person Carson; 11.05.2018
comment
Отлично! Я создавал как com-объект приложение MSO и передавал внешнюю команду функции модуля VBA (мне не нужно было делать приложение «видимым», чтобы графический интерфейс внешней команды был интерактивным), но это быстрее и чище. - person Dale Thompson; 07.01.2021

Я решил это, отключив службу apache в Windows и запустив apache с помощью httpd.exe. После этого можно использовать exec() для открытия любой программы Windows с графическим интерфейсом.

exec("Path_to_mi_program.exe" "file_to_open");
person MTK    schedule 17.12.2016
comment
Это сработало для меня для связанного (exe, который взаимодействует с графическим интерфейсом), где больше ничего не работало. - person Rick; 26.09.2019

Вероятно, самый простой способ — использовать COM (я предполагаю, что он будет работать только локально на компьютере с Windows):

<?php
function _exec($cmd) 
{ 
  $WshShell = new COM("WScript.Shell"); 
  $oExec = $WshShell->Run($cmd, 0,false); 
  echo $cmd;
  return $oExec == 0 ? true : false; 
}

_exec("youexe.exe");
?>

Взято из здесь

person LeleDumbo    schedule 30.06.2012
comment
я пробовал это, но ничего не произошло, и функция возвращает 1 - person Farok Ojil; 30.06.2012
comment
Он запустил программу, но она работала в фоновом режиме. Я не мог видеть графический интерфейс - person Jarco; 09.11.2012

Речь идет только о пользователях. Когда вы запускаете программу, она запускается от имени системного пользователя. Я попробовал runas /user:myusername blabla.exe, но он вернул пароль для моего имени пользователя и выхода.

$deneme = shell_exec('runas /user:myusername C:\Windows\Temp\putty.exe');
echo "$deneme";

он вернулся:

myusername için parolayı girin: (english: password for myusername)
person Melih Yıldız'    schedule 26.05.2013