当我尝试在Windows中并排运行Java应用程序(SxS)时,我遇到了一个非常模糊的问题。
我已经完成了创建java.exe.config和java.exe.manifest文件的所有准备工作,这些文件与JRE位于同一文件夹中。
当我从命令行调用它(通过启动.bat文件)时,应用程序正常运行。.bat文件使用 SxS 配置的 Java(这是我正在运行应用程序的框中唯一的一个)
但是,当我尝试从另一个 Java 进程(使用 Runtime.getRuntime.exec()
)或ProcessBuilder
内部调用它时,它似乎完全忽略了 SxS 配置,子 Java 进程抱怨它找不到 COM 库,这就是我不得不做 SxS 的原因。我必须补充一点,父 Java 进程也是由为 SxS 配置的 Java 启动.exe Java 启动的。因此,我假设"Runtime.getRuntime(), ProcessBuilder()
"会给我Java SxS加载的环境。
使用一些Windows工具(procexp.exe,procmon.exe)进行进一步的调试,我发现了以下内容:当我从.bat文件启动应用程序时,.manifest文件通常由crss读取.exe(因为它应该是)。但是,当 Java 生成另一个进程时,根本不考虑 .manifest 文件。我能想到的一个可能的问题是.exe启动进程的 Java 的当前目录与 java.exe.manifest 文件所在的目录不同。
我唯一能想到的是 java 启动器中的一个错误/问题(或者他们称之为功能)。
有人有类似的问题吗?谁能对上述情况有所了解?非常感谢。
到目前为止,我已经尝试了以下方法:
- 从.bat文件内部运行 Java 进程。工作
- 使用
Runtime.getRuntime().exec(). DID NOT WORK
- Invoked the .bat file from a parent Java process using Runtime.getRuntime().exec() 从父 Java 进程调用 Java 进程。没用
- 使用进程生成器设置 .manifest 文件所在的当前目录。没用
我在计算机上对其进行了测试,它可以工作。尝试:
- 从 Runtime.getRuntime()
- .exec(...) 读取 getErrorStream() ;如果你不能解决这个问题,请发送到这里,
- 使用完整路径(C:\Program...)运行进程,
- 编译Java程序.jar,放入带有.bat的文件夹,打开CMD,将当前目录设置为该文件夹并运行jar文件(使用java -jar文件名.jar),