ProcessBuilder无法访问相对文件夹位置

时间:2016-08-10 19:45:37

标签: java cmd processbuilder

我尝试使用ProcessBuilder从Java代码执行第三方JAR。此JAR要求您在执行此JAR时必须位于安装目录中,否则它将无法工作。以下是此第三方JAR的文件夹结构:

C:\\Program Files\\MSG MCE Software I10
C:\\Program Files\\MSG MCE Software I10\\jre
C:\\Program Files\\MSG MCE Software I10\\jre\\bin

以下是我使用的代码:

String cmdLine = "\"jre\\bin\\java\" -Xms512m -Xmx1024m -cp \"C:\\Program Files\\MSG MCE Software I10\\msgmce.jar;C:\\Program Files\\MSG MCE Software I10\\*:.\" com.mmm.his.msgmce.Main -i \"C:\\drginput\\"+inFileName+"\" -o \"C:\\drgoutput\\"+outFileName+"\" ";
ProcessBuilder builder = new ProcessBuilder( "cmd.exe", "/c", "cd \"C:\\Program Files\\MSG MCE Software I10\"&&"+cmdLine);
System.out.println("cmdLine->"+cmdLine); 
Process p = builder.start();

如您所见,我最初尝试导航到安装目录"C:\\Program Files\\MSG MCE Software I10\",然后尝试执行java可执行文件。

问题是我收到了"System cannot find file specified",因为它无法找到"jre/bin/java"的相对路径。

现在这适用于一台机器但不适用于另一台机器。在创建ProcessBuilder并调用cmd.exe时,我导航到安装主目录,因此我应该能够访问jre/bin/java文件。

有没有人知道为什么这会在一台机器上运行而不是另一台机器呢?

1 个答案:

答案 0 :(得分:1)

好的,我明白这一点。在它运行的计算机上,Eclipse,Tomcat等所有程序都安装在同一个C驱动器上,但在另一台计算机上,Eclipse安装在不同的驱动器上。

第三方JAR安装在C盘上,我的程序在Eclipse上运行但在D盘上运行。由于某种原因,ProcessBuilder中的更改目录到C驱动器不起作用。出于安全原因,不确定这是否是ProcessBuilder的限制,但是在一个驱动器上安装所有内容都有效。