次のコードを使用して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の2つのインスタンスがサーバー上でサイレントに起動します
- PDFファイルがネットワークプリンターに印刷されます
- AcroRd32.exeインスタンスが終了/終了しない
- バッチファイルは実行を続けます(AcroRd32.exeプロセスを手動で終了するまで)
- PHPスクリプトは実行されたままであるため、クライアントマシンはそれ以上何もできません。
期待される動作:
- PHPページが正しい引数でバッチファイルを正常に呼び出す
- AcroRd32.exeの2つのインスタンスがサーバー上でサイレントに起動します
- PDFファイルがネットワークプリンターに印刷されます
- AcroRd32.exeインスタンスの終了/終了
- バッチスクリプトが完了します(これにより、PHPスクリプトが解放されます)
- PHPスクリプトは継続し、最終的には終了して、エンドユーザーが作業を続行できるようにします
失敗した解決策:
- バッチファイルでTASKKILLを使用して、印刷後にAcroRd32.exeプロセスを終了しますが、/ F(強制)フラグを使用しても、AcroRd32.exeは開いたままになります。AcroRd32.exeプロセスを手動で終了すると、バッチファイルが続行され、TASKKILL行が実行されます。もちろん、プロセスが存在しないため、「プロセスが見つかりません」というエラーが返されます。したがって、コントロールは印刷後にバッチファイルに戻されないように見えますが、AcroRd32.exeのままです。
PDFの印刷後にAdobeReaderを閉じる方法を知っている人はいますか?