У меня есть следующий код в пакетном файле, который вызывается PHP-скриптом с использованием shell_exec()
:
"C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe"
/t "D:\xampp\htdocs\instrument\app\webroot\Repair Tickets\%1.pdf"
\\hnurenfp01\Accounts_FS-1128MFP
Параметр %1 — это имя файла, которое отправляется в качестве аргумента пакетному файлу из сценария PHP.
Наблюдаемое поведение:
- Страница PHP успешно вызывает пакетный файл с правильным аргументом
- Два экземпляра AcroRd32.exe автоматически запускаются на сервере
- PDF-файл распечатывается на сетевой принтер
- Экземпляры AcroRd32.exe не заканчиваются/не закрываются
- Пакетный файл продолжает работать (до завершения процессов AcroRd32.exe вручную)
- PHP-скрипт остается исполняемым, поэтому клиентская машина не может делать что-либо дальше
Ожидаемое поведение:
- Страница PHP успешно вызывает пакетный файл с правильным аргументом
- Два экземпляра AcroRd32.exe автоматически запускаются на сервере
- PDF-файл распечатывается на сетевой принтер
- Экземпляры AcroRd32.exe завершаются/закрываются
- Пакетный скрипт завершается (что, в свою очередь, должно освободить PHP-скрипт)
- Сценарий PHP продолжается и в конечном итоге завершается, чтобы конечные пользователи могли продолжить свою работу.
Неудачные решения:
- Использование TASKKILL в пакетном файле для завершения процессов AcroRd32.exe после печати, но AcroRd32.exe остается открытым даже при использовании флага /F (принудительно). Когда я вручную завершаю процессы AcroRd32.exe, командный файл продолжает работу, а затем выполняет строку TASKKILL, которая, конечно же, возвращает ошибку «процесс не найден», поскольку его больше нет. Так что вроде управление не возвращается обратно в батник после печати, оно остается с AcroRd32.exe.
У кого-нибудь есть идеи, как я могу закрыть Adobe Reader после печати PDF?