2016-07-28 27 views
-1

Webアプリケーション(Windows + Primefaces 5 + Tomcat 8)からPascalで.exeファイルを開発しようとしています。プログラムは私がそれを読むつもりであるテキストファイルを生成するが、それはそれを行う許可を持っていないようだが、例外は投げられなかった。ここでJava Webアプリケーションから.exeファイルを実行できない

は、私はパスを選択する方法である:

String path = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/WEB-INF/lib/"); 
projeto.setQtde(1); 
this.esquemas = gerenciarProjeto.realizarCorte(projeto, usuario, path+"/"); 

、ここでは、私がプログラムを呼び出す方法です:

Runtime rt = Runtime.getRuntime(); 
Process pc = rt.exec(this.caminho+"cortebi.exe"); 

InputStreamReader isr = new InputStreamReader(pc.getErrorStream()); 
BufferedReader br = new BufferedReader(isr); 
String line = null; 
System.out.println("<ERROR>"); 

while ((line = br.readLine()) != null){ 
    System.out.println(line); 
} 

System.out.println("</ERROR>"); 
int exitVal = pc.waitFor(); 
System.out.println("Process exitValue: " + exitVal); 

私は私のプロジェクトのルートに.exeファイルを置くかのことを実現し、 Eclipseを管理者として実行します。しかし、配備後も同じようにWebアプリケーションのルートに配置する方法がわからないので、別の場所に置いてみましたが、何もしませんでした。

+0

あなたのアプリケーションは 'Admin'権限で' Windows'で動作しますか? – 11thdimension

+0

実際、私は知らないが、ここの地方の大学のためであり、物事はあまり明確ではない。私が.exeファイルに書き込み権限を与えることができれば、それは十分だろう。 –

+1

おそらく、Linux上で 'exe'ファイルを実行することができないからです。それ以外の場合は、実行可能ファイルをWARに埋め込み、一時ディレクトリに保存してJava ProcessBuilderを使用して実行できます。しかし、これは、コンテナが管理者権限で開始された場合にのみ機能します。これは、セキュリティ上の理由からおそらくそうではないでしょう。とにかくexeを実行したいのはなぜですか? – 11thdimension

答えて

0

私は問題が何かを理解することができました。 Runtime.getRuntime()。exec()はtradicional DOSプロンプトのように振る舞いますが、私は間違っていました。実際には、問題自体はウィンドウやファイルのパーミッションの問題ではなく、exec()メソッドの動作の誤解でした。 When Runtime.exec() won't:私は幹部()メソッドが機能する方法は、より多くの私はここで良い材料を見つけ制限されていると述べたよう

public void executarCortebi(File file){ 
    try { 

     Process pc = Runtime.getRuntime().exec("cmd /c start cortebi.exe",null, file);   

     StreamGobbler error = new StreamGobbler(pc.getErrorStream(), "ERRO"); 

     StreamGobbler output = new StreamGobbler(pc.getInputStream(), "OUTPUT"); 


     error.start(); 
     output.start(); 

     pc.waitFor(); 

     Thread.sleep(800); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    }catch(InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

:私は、コードの新しい作品を書きました。 私に使用されるgetRuntime.exec()のパラメータを説明すると、fallowがあります。最初に実行する必要があるコマンド自体(古いコールドと新しいコールドの違いは目立ちます)、2番目は.exeこの場合のファイルはnoneで、3番目は私の.exeプログラムからのパスを持つファイルです。 すべてが機能しています!

関連する問題