5

e は独自のディレクトリで実行する必要があるため、 Process("dir/e.exe") を使用できません。そうしないと、そのリソースにアクセスできません。しかし、作業ディレクトリを変更しようとするたびに例外が発生します:

Process("e.exe", new File(dir)) 
Process("e.exe", new File("\"+ dir))
Process("e.exe", new File(new File(dir).getCanonicalPath()))  

Caused by: java.io.IOException: Cannot run program "e.exe" (in directory ".
\dir"): CreateProcess error=2, The system cannot find the file specified

これらは機能しません。まったく同じエラーが発生します。代替案はありますか?

編集:これは私のディレクトリをどのように見えるかです:

MyFolder:
|-app.jar
|-folderWithExe
  \-e.exe
4

3 に答える 3

3

さて、それは私が持っているものです(ダーティコード、デモ目的のためだけです)

まず、私のディレクトリ構造(サブディレクトリはサブディレクトリです):

cdshines@v3700:~/test|⇒  ls -R
.:
log  pb.scala  subdir

./subdir:
ls

次に私のコード:

import java.lang.ProcessBuilder
import java.io.File

val pb = new ProcessBuilder("ls", "../")
pb.directory(new File("subdir"))
pb.redirectOutput(ProcessBuilder.Redirect.to(new File("log")))
val p = pb.start
p.waitFor
println(p.exitValue)

どれどれ:

cdshines@v3700:~/test|⇒  scala pb.scala
0
cdshines@v3700:~/test|⇒  cat log
log
pb.scala
subdir

それはあなたがこのコードから期待するものですか?私にはうまく見えます。

一般に:

1) を使用して ProcessBulder を作成しますnew ProcessBuilder("application", "arg0", "arg1")

2)そのディレクトリを設定します"pb.directory(new File("path/to/dir"))"

Process3)またはProcessBuilderメソッドを使用して、出力または終了コードなどを取得します。

Scala を使用Sourceすると、書くのを少し速くすることができます (さらに汚いですが、遊ぶには十分です):

scala.io.Source.fromInputStream(
  new ProcessBuilder("ls", "../")
  .directory(new File("subdir"))
  .start
  .getInputStream).getLines.mkString("\n")
于 2013-09-09T21:14:48.253 に答える
0

このコードはあなたの問題を解決するはずです

    ProcessBuilder builder = new ProcessBuilder(
            "cmd.exe", "/c", "cd \"D:\\folder\\With\\Exe\" && e.exe");
    Process p = builder.start();
    p.waitFor();
于 2014-11-30T13:17:43.160 に答える