2013-12-19 4 views
5

Извините, если это кажется глупым вопросом. Я никак не мог запустить Windows GUI-приложение PHP. Я пробовал любое обходное решение, которое я выяснил из похожих вопросов, но они вообще не работали.PHP, как запустить Windows GUI-приложение

Моя команда:

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

я могу запустить эту команду с помощью инструмента Окно командной строки, и она работала хорошо, Notepad ++ запущен и открыт графический интерфейс с ожидаемым содержанием. Я хотел бы сделать это в 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 DID NOT DISPLAY.

Мой PHP версия 5.4.3

Любая помощь приветствуется.

+0

http://stackoverflow.com/a/1403260/426533 – Sergey

+0

Возможный дубликат [php. Как запустить внешнюю программу - возникли проблемы с системой и exec] (http://stackoverflow.com/questions/1403203/php- как-д-я-старт-ан-внешней-программа-обкатка, имеющие проблемы с-с- -система-и) – Sergey

+0

@Sergey Он заявил, что он пробовал все перечисленные в этом Q/A. –

ответ

3

Я предполагаю, что PHP работает в Apache, который, в свою очередь, является сервисом.

Теперь, начиная с любого приложения из службы, его графический интерфейс не будет отображаться, так как служба выполняется в отдельном сеансе, что не позволяет взаимодействовать с пользователями Desktop.

Смотрите этот ответ для более подробной информации: Service starting a process wont show GUI C#

Однако могут быть и другие способы для достижения этой цели.

  1. Создайте собственное C++ (или эквивалентное) приложение, которое создаст ваше целевое приложение GUI для данного пользователя. Ответ How can a Windows service execute a GUI application? объясняет для этого CreateProcessAsUser(). Этот метод потребует указать имя пользователя и пароль.

  2. Создание пользовательского типа клиент-сервер. Часть сервера всегда будет работать внутри в режиме пользователя, где должен отображаться графический интерфейс. И клиент будет вызван с PHP. Когда клиент вызывается, он будет сигнализировать о части сервера, используя событие, подобное IPC. Сервер может запускать приложение GUI по очереди.

  3. Используйте Microsoft PSEXEC utility, чтобы начать процесс в графическом интерфейсе. Однако для этого потребуется имя пользователя, пароль и идентификатор сеанса.

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

    SESSION является идентификатор сессии (Используйте Диспетчер задач -> вкладка пользователя, чтобы увидеть свой идентификатор сеанса)

    USER, PASS это имя пользователя и пароль для пользователя

Смежные вопросы