在使用 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 启动两个同时的批处理文件,然后在批处理文件调用 16 位 exe 时也正确运行它们?