我正面临一个非常模糊的问题,而我正在尝试在 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 文件所在的当前目录。不工作