2016-08-19 30 views
0

私のJavaコードから.exeファイルを実行するには、いくつかの引数/オプションを.exeファイルに渡します。Javaから.exeファイルを実行する

だから、基本的に、私は次のようでした:

BufferedReader br = null; 
OutputResult out = new OutputResult(); 

String commandStr= "cmd.exe /C A-B/xyz.exe health -U admin -P admin"; 
Process p = Runtime.getRuntime().exec(commandStr); 

br = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line; 
while ((line = br.readLine()) != null) { 
    out.add(line.trim()); 
} 

注:ここで、Bはxyz.exeが配置されているディレクトリの名前です。

しかし、変数outを出力すると、実際には何もないことが示されます。

そこで代わりに上記のコードを私には、以下にそれを修飾:

BufferedReader bre = null; 
OutputResult oute = new OutputResult(); 

String commandStr= "cmd.exe /C A-B/xyz.exe health -U admin -P admin"; 
Process p = Runtime.getRuntime().exec(commandStr); 

bre = new BufferedReader(new InputStreamReader(p.getErrorStream())); 
String line; 
while ((line = bre.readLine()) != null) { 
    oute.add(line.trim()); 
} 

今ここ変数OUTEが印刷されるとき、それはメッセージを示し、

「AB」は内部として認識されませんまたは外部コマンド、動作可能なプログラムまたはバッチファイルである。

私の質問は、実際の.exeファイルが存在するディレクトリとしてA-Bが扱われない理由です。

この問題について知っている方は、エラーを解決してください。

+1

プログラムを直接呼び出すことができます。 'cmd.exe'を追加する必要はありません – CSK

+0

これは同じことをする別の方法かもしれませんが、ここでの質問はABがディレクトリとして扱われていない理由です!...そして、そうであってはいけません。代わりに、コードは、ディレクトリ内に移動し、exeファイルを実行する必要があります。 – gautam

答えて

0

たとえば、RaspbianのJavaでは、スペースを含むディレクトリ(たとえば/新規フォルダ)にアクセスできないことがわかりました。私は、Raspbianがディレクトリを作成する際にcharをどのように考慮するかについてのいくつかの問題を推測します。おそらく、Windowsは ' - ' charと同じ問題を抱えている可能性があります。あなたはそのような文字なしでディレクトリの名前を変更して、もう一度やり直すことができますか?

(Macを使用しているため、問題を再現できません。別のオプションとして、実際にはcharとは関係なく、exeが実行されたシェルスクリプトを作成することができますこのスクリプトをJavaで実行してください。私はこの方法を問題なく使用していたので、これだけアドバイスしています)。

1

ターゲットxyz.exeへのフルパスを使用する必要があります。そのようなcmd.exeを実行すると、あなたのJavaプログラムのフォルダに対して、それはC:\Windows\System32に相対的なものなので、あなたのABフォルダは見えません。

したがって、たとえば: cmd.exe /C C:/A-B/xyz.exe health -U admin -P admin

そして@CSKが正常に気づいたとして、あなたはCMD.EXEせずに、直接あなたの.exeファイルを実行することができます。例:

Process process = new ProcessBuilder("C:/A-B/xyz.exe", "health", "-U", "admin", "-P", "-admin").start(); 
関連する問題