2011-12-06 20 views
0

javaのCygwin。しかし、今私は次のメッセージを得ています。スレッド "main"の例外java.io.IOException: "D:/ cygwin/bin/bash"プログラムを実行できません:CreateProcessエラー= 193、%1は有効なWin32アプリケーションではありません

Exception in thread "main" java.io.IOException: Cannot run program "D:/cygwin/bi 
n/bash": CreateProcess error=193, %1 is not a valid Win32 application 

この例外を回避するにはどうすればよいですか?

コードが

{ 
      String cmd; 
      cmd = "D:/cygwin/bin/bash -c'/bin/ls -la'"; 
      System.out.println("EXECING: " + cmd); 
      p = Runtime.getRuntime().exec(cmd); 

      in = p.getInputStream(); 
      br = new BufferedReader(new InputStreamReader(in)); 
      System.out.println("OUT:"); 
      while ((line = br.readLine()) != null) { 
       System.out.println(line); 
      } 

      in = p.getErrorStream(); 
      br = new BufferedReader(new InputStreamReader(in)); 
      System.out.println("ERR:"); 
      while ((line = br.readLine()) != null) { 
       System.out.println(line); 
      } 

      System.out.println(); 
} 
+0

ファイル名の最後に '.exe'を追加してみてください。 – cHao

+0

'bash'を実行しようとするJavaコードを投稿できますか? – hmjd

+0

D:/ cygwin/bin/bashは確実に存在しますか?私はcygwinを持っていて、これを実行しましたが、bashへのパスを "C:/ bin/bash"に変更し、-c引き数を "-c/bin/ls -la"に変更しました。 – hmjd

答えて

0

.exeがこれを解決しただろうが、そうbash.???ファイルを削除なかった追加のコメントで推奨されているように。

bash.exeと同じディレクトリにbash.???という名前のファイルがありました(私は拡張子がわかりませんでした)。Runtime.exec()はそれを実行しようとしていました。

bash.???は、正常に実行された後、ある時点で作成されている必要があります。そのため、一度動作してから失敗します。

関連する問題