我正面临一个非常模糊的问题,而我正试图在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启动的。因此,我认为“Runtime.getRuntime(), ProcessBuilder()
”将为我提供Java SxS加载环境。
使用一些Windows工具(procexp.exe,procmon.exe)进行一些进一步调试我发现以下内容:当我从.bat文件启动应用程序时,.manifest文件通常由crss.exe读取(因为它应该是)。但是,当Java生成另一个进程时,根本不考虑.manifest文件。我能想到的一个可能的问题是,启动进程的Java.exe的当前目录与java.exe.manifest文件所在的目录不同。
我唯一能想到的是java启动器中的错误/问题(或者他们称之为功能)。
有没有人有类似的问题?任何人都可以对上述事项有所了解吗?非常感谢。
到目前为止,我尝试了以下内容:
Runtime.getRuntime().exec(). DID NOT WORK
Invoked the .bat file from a parent Java process using Runtime.getRuntime().exec()
从父Java流程调用java进程。 无法工作 答案 0 :(得分:1)
我在计算机上测试了它,它可以工作。尝试: