11

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

1 回答 1

1

我在我的电脑上测试了它,它可以工作。尝试:

  • 从 Runtime.getRuntime().exec(...) 中读取 getErrorStream(); 并发送到这里,如果你不能解决这个问题,
  • 使用完整路径 (C:\Program...) 运行进程,
  • 将java程序编译为.jar,放入.bat文件夹,打开CMD,将当前目录设置为该文件夹,运行jar文件(使用java -jar filename.jar),
于 2015-04-30T19:50:23.267 回答