Intel XEON CPU を使用した 32 ビット Windows Server 2007 Standard Service Pack 2 で実行されています。
私は、16 ビット ソフトウェアを実行しなければならないサーバー ソフトウェアを持つといううらやましい立場で働いています ... :)
そして、ソケットを介してローカルユーザーに16ビットプログラムを提供するサーバーがあります。
セットアップは次のとおりです。
Java サーバー プログラムは、「cmd.exe \C batchfile.bat」プロセスを開始します。その batchfile.bat で、実際の 16 ビット実行可能ファイル (すべての目的で pgm.exe) をセットアップして実行します。
次に、リクエストをリッスンし、必要に応じて別のリクエストを生成します。
現在、これは JVM 1.6 バージョンのランタイムを使用して完全に機能します。ただし、Java 7 および Java 8 では、batchfile.bat が実際に 16 ビット exe プログラムを開始しようとした瞬間にハングします。
TaskManager を使用すると、cmd.exe が並行して生成されていることがわかります。しかし、現在の cmd.exe が 16 ビット プログラムを離れる (ntvdm.exe が終了する) まで、次の cmd.exe はフリーズ (ロック?) し、16 ビット exe の実行で停止します。
手がかり?これらの Java バージョン間で何かが変更されており、それは私たちにとって完全な謎です。
では、なぜ Java 7 と Java 8 は、Runtime.Process を使用して 2 つのバッチファイルを同時に開始できず、バッチファイルが 16 ビット exe を呼び出したときにそれらを適切に実行できないのでしょうか?