как я могу запустить exe-файл (расположенный на локальном диске) при нажатии кнопки php? [dубликат]

Общий ответ: передайте указатель на вещь, которую вы хотите изменить.

В этом случае это будет указатель на указатель, который вы хотите изменить.

10
задан Pascal MARTIN 10 September 2009 в 05:15
поделиться

3 ответа

Какое поведение вы ожидаете? Вызов system ('notepad') работает отлично - он просто не отображает графический интерфейс. Он работает в фоновом режиме, и PHP сидит там терпеливо, ожидая, когда блокнот закроется (и только продолжит, если вы убьете блокнот из списка процессов).

Если вы ожидаете, что он появится в графическом интерфейсе, Я абсолютно уверен, что вы не можете этого сделать. ;) Параметр может состоять в том, чтобы выписать пакетный скрипт ( file_put_contents ('runme.bat', 'notepad hello.txt') ) и поставить этот пакетный скрипт в очередь (с планировщиком Windows или любым другим cron -эквивалент находится на Windows), чтобы работать в асинхронном режиме (и очистить себя в конце).

4
ответ дан Nathan 15 August 2018 в 23:40
поделиться
  • 1
    Я понимаю что ты имеешь ввиду. Вы правы, блок работает без GUI. (Моя конфигурация отключена через 60 секунд.) Поэтому я не могу запустить программу на основе GUI из PHP и прибегать к решениям на базе ОС. Это хорошо знать. благодаря ! – sdfor 10 September 2009 в 05:01

Очень поздний ответ, но я сам работал над этим и обнаружил, что действительно можно запустить GUI-программу из PHP с сервера Apache в Windows XP.

  • Пуск-> Выполнить , введите «services.msc», чтобы открыть диспетчер служб (другие способы добраться туда, это самый простой ИМО)
  • Найдите свой сервис Apache (мой был вызван «wampapache» с использованием WampServer 2.0)
  • Откройте свойства сервиса (двойные щелчки или щелкните правой кнопкой мыши-> свойства)
  • Перейдите в учетную запись «Вход в систему» ​​и установите флажок «Разрешить службу для взаимодействия с рабочим столом».
  • Вернитесь на вкладку «Общие», остановите службу, запустите службу

Теперь, используя следующий код, вы можете создавать процессы пользовательского интерфейса из PHP. В первом фрагменте кода сценарий не будет ждать закрытия приложения; второй фрагмент ждет закрытия программы перед продолжением (блокирование).

Не дожидайтесь приложения:

pclose (popen ("start / B notepad.exe" ,

Ожидать применения:

system ('start notepad.exe');

Это было протестировано в Windows XP. Я не пробовал его ни в каких других версиях Windows, ваш размер может отличаться.

Боковое примечание. В моей конкретной установке я использовал другую опцию на вкладке Вход в службу - Apache работал как чтобы он мог получить доступ к нескольким сетевым ресурсам с разрешениями пользователя домена. Этот флажок недоступен для этого параметра, только если служба работает как локальная система. После обширных исследований я обнаружил, что нет единого способа, чтобы одна служба взаимодействовала с текущим рабочим столом и использовала учетные данные конкретного пользователя. Это одно или другое предложение, предлагаемое средство состоит в том, чтобы разделить вашу службу на два компонента: один, который использует учетные записи пользовательской учетной записи и тот, который взаимодействует с рабочим столом. Не очень практично, когда служба, о которой вы говорите, является веб-сервером. Эта заметка, вероятно, довольно специфична для моего варианта использования, но я хотел бы выразить это здесь, если я могу спасти кого-то еще от разочарования в будущем.

18
ответ дан Chris Baker 15 August 2018 в 23:40
поделиться
  • 1
    Мне любопытно, как это получилось 10 upvotes - он все еще работает только с блокнотом в качестве фонового процесса для моей настройки, даже если у меня есть «взаимодействовать с рабочим столом». Я использую Windows 7. – user24601 21 February 2014 в 18:55
  • 2
    @ user24601 Это было протестировано только для Windows XP. Я запомню это в ответе. Что касается upvotes ... кого это волнует? – Chris Baker 21 February 2014 в 19:15
  • 3
    Работает отлично на Windows 7 – mpyw 18 June 2014 в 03:04
  • 4
    Очевидно, что это решение работает только в ограниченном количестве сред. У меня Windows 7, и он не работает, и я не нашел никого, кроме @CertaiN, который говорит, что он работает. – Sheldon Juncker 1 February 2015 в 18:50

Еще один супер поздний ответ, но это появляется в Google при поиске «php run gui program» ...

Я смог запустить графическое приложение в Windows 8.1, выполнив, выполнив и удаление запланированной задачи:

  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');   
16
ответ дан jxmallett 15 August 2018 в 23:40
поделиться
  • 1
    У меня есть окна 7 и пробовал другие ответы, пока не запускал gui, но этот работает отлично. – Mojtaba Rezaeian 17 March 2016 в 13:10
  • 2
    также сражался на Win10, и ни одно из решений не работает - это работает 100% +1 для outbox. – l0ft13 17 March 2016 в 20:13
  • 3
    Как открыть локальные папки, то есть файловую систему? – RN Kushwaha 19 March 2016 в 20:14
  • 4
    Благодаря тонну. Он работал на моем экземпляре AWS Windows Server 2012. Я искал это решение за последние 2 дня. – Amol Bharmoria 5 April 2016 в 15:59
  • 5
    Прекрасно работает в Windows 7. Переключил аргумент в cmd.exe / c {Path-to-blah} и альт. Прекрасно работает. – Bren1818 28 March 2017 в 13:08
Другие вопросы по тегам:

Похожие вопросы: