【发布时间】:2023-07-30 17:37:01
【问题描述】:
我在一个由 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 中。
有没有人知道如何在 PDF 打印后关闭 Adobe Reader?
【问题讨论】:
标签: php batch-file shell-exec