Очень поздний ответ, но я сам работал над этим и обнаружил, что действительно возможно запустить программу с графическим интерфейсом из PHP с сервером Apache в Windows XP.
- Пуск-> Выполнить, введите «services.msc», чтобы вызвать управление службами (другие способы получить это, это самый простой IMO)
- Найдите свой сервис Apache (мой был назван "wampapache" с помощью WampServer 2.0)
- Открыть свойства сервиса (двойной щелчок или правый клик-> свойства)
- Перейдите в учетную запись входа и убедитесь, что флажок «Разрешить службе взаимодействовать с рабочим столом» установлен на флажок
- Вернитесь на вкладку Общие, остановите службу, запустите службу
Теперь, используя код ниже, вы можете создавать процессы пользовательского интерфейса из PHP. В первом фрагменте кода скрипт не будет ожидать закрытия приложения; второй фрагмент ожидает закрытия программы, прежде чем продолжить (блокирование).
Не ждите приложения:
pclose(popen("start /B notepad.exe", "r"));
Ждать заявки:
system('start notepad.exe');
Это было проверено на Windows XP. Я не пробовал его на других версиях Windows, ваш опыт может отличаться.
Примечание
В моей конкретной установке я использовал другую опцию на вкладке «Вход в систему» службы - Apache работал как пользователь домена, поэтому он мог получить доступ к нескольким сетевым ресурсам с разрешениями пользователя домена. Этот флажок недоступен для этой опции, только когда служба работает как локальная система. После обширных исследований я обнаружил, что у одного сервиса просто нет возможности как взаимодействовать с текущим рабочим столом, так и использовать учетные данные конкретного пользователя. Это предложение типа «один или другой», предлагаемое решение - разделить ваш сервис на два компонента: один, использующий учетную запись пользователя, и другой, взаимодействующий с рабочим столом. Не очень удобно, когда вы говорите о веб-сервере. Эта заметка, вероятно, довольно специфична для моего варианта использования, но я хотел бы выложить ее здесь на случай, если смогу спасти кого-то еще от разочарования в будущем.