2016-08-10 28 views
0

ProcessBuilderを使用してJavaコードからサードパーティのJARを実行しようとしています。このJARでは、このJARの実行時にインストールディレクトリにいなければなりません。そうでない場合は動作しません。以下は、このサードパーティのJAR用フォルダ構造である:ここでProcessBuilderが相対フォルダの場所にアクセスできない

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"の相対パスを見つけることができないためです。

これは1台のマシンでは動作しますが、別のマシンでは動作しません。 ProcessBuilderを作成してcmd.exeを呼び出すと、インストールホームディレクトリに移動するので、jre/bin/javaファイルにアクセスできるはずです。

これは1台のマシンでは動作するが、別のマシンでは動作しない理由が分かりますか?

+0

あなたは 'C:\ Program Files \ MSG MCE Software I10 \'が存在しますか? –

+0

はい、存在します。 EclipseとJARが異なるドライブ上にあることに気がつきました。 ProcessBuilderからDからCへのディレクトリの変更は機能していないようです。セキュリティ上の理由から、Javaの制限がありますか?わからない。 – Marquinio

答えて

1

OKわかりました。それが動作していたコンピュータでは、Eclipse、Tomcatのようなすべてのプログラムが同じCドライブにインストールされていましたが、他のコンピュータのEclipseは別のドライブにインストールされていました。

サードパーティ製のJARがCドライブにインストールされていて、プログラムがEclipseではDドライブで実行されていました。なんらかの理由で、ProcessBuilderのCドライブへの変更ディレクトリが機能していませんでした。これがセキュリティ上の理由からProcessBuilderの制限事項であるかどうかは不明ですが、すべてのものを単一のドライブにインストールすることは有効でした。

+0

FYI: 'cd'を使ってドライブを変更することはできません。ドライブを 'D:\'から 'C:\'に変更するには、 'cd'コマンドを実行する前に' C: 'を使用してください。あなたのコマンドは次のようになります: '' C:&cd \ "C:\\ Program Files \\ MSG MCEソフトウェアI10 \" && "+ cmdLine' –

関連する問題