我正面临一个非常模糊的问题,而我正在尝试在 Windows 中并排(SxS)运行 Java 应用程序。
我已经完成了创建 java.exe.config 和 java.exe.manifest 文件的所有准备工作,这些文件与 JRE 位于同一文件夹中。
当我从命令行调用应用程序时(通过启动 .bat 文件),应用程序运行正常。.bat 文件使用 SxS 配置的 Java(这是我正在运行的应用程序框中唯一的一个)
但是,当我尝试从另一个 Java 进程中调用它时(Runtime.getRuntime.exec()
使用 ProcessBuilder
我必须补充一点,父 Java 进程也是由为 SxS 配置的 Java.exe 启动的。因此,我会假设“ Runtime.getRuntime(), ProcessBuilder()
”会给我 Java SxS 加载环境。
使用一些 Windows 工具(procexp.exe、procmon.exe)进行进一步调试时,我发现了以下内容:当我从 .bat 文件启动应用程序时,crss.exe 通常会读取 .manifest 文件(因为它应该是)。但是,当 Java 生成另一个进程时,根本不会考虑 .manifest 文件。我能想到的一个可能的问题是启动进程的 Java.exe 的当前目录与 java.exe.manifest 文件所在的目录不同。
我唯一能想到的是java启动器中的一个错误/问题(或者他们称之为功能)。
有没有人有类似的问题?任何人都可以阐明上述内容吗?非常感激。
到目前为止,我已经尝试了以下方法:
- 从 .bat 文件中运行 java 进程。工作过
- 使用从父 Java 进程调用 java 进程
Runtime.getRuntime().exec(). DID NOT WORK
Invoked the .bat file from a parent Java process using Runtime.getRuntime().exec()
. 不工作- 使用 ProcessBuilder 设置 .manifest 文件所在的当前目录。不工作