Java SxS(并排)配置

时间:2013-09-16 08:12:18

标签: java side-by-side sxs

我正面临一个非常模糊的问题,而我正试图在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启动器中的错误/问题(或者他们称之为功能)。

有没有人有类似的问题?任何人都可以对上述事项有所了解吗?非常感谢。

到目前为止,我尝试了以下内容:

  • 从.bat文件中运行java进程。 保护正常工作
  • 使用Runtime.getRuntime().exec(). DID NOT WORK
  • Invoked the .bat file from a parent Java process using Runtime.getRuntime().exec()从父Java流程调用java进程。 无法工作
  • 使用ProcessBuilder设置.manifest文件所在的当前目录。 无法工作

1 个答案:

答案 0 :(得分:1)

我在计算机上测试了它,它可以工作。尝试:

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