1
void restartWeb() {
        try {
            String[] command = new String[] {"webRestarter.exe" , ">>","webLog.log"};
            Runtime.getRuntime().exec(command);
        } catch (java.io.IOException err) {
        webServer.logError(err.getMessage());
        }
    }

なぜこれが機能しないのですか?どうすれば修正して、希望どおりに機能するようにできますか?

--パラメータ>>webLog.logを使用してwebRestarter.exeを実行します

したがって、次のようなものを吐き出します。

webRestarter.exe>>webLog.log
4

4 に答える 4

5

exec呼び出しでパイプを使用することはできません。パイプはシェルの機能であり、オペレーティングシステムの機能ではありません。したがって、シェル実行可能ファイルを呼び出してコマンドを渡す必要があります。代わりにこれを試してください:

String[] command = new String[] {"cmd.exe", "/c", "start webRestarter.exe", ">>","webLog.log"};
于 2010-08-31T12:35:33.203 に答える
1

パラメータは、webRestarter.exeコマンドに直接渡されます。通常、コマンドラインインタプリタによって行われるため、パラメータを使用して標準出力をファイルにリダイレクトすることはできません。

ただし、exec()メソッドはProcessオブジェクトを返します。これを使用して、標準出力を取得し、ファイルに書き込むことができます。

出典:

http://download.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exec%28java.lang.String%29

http://download.oracle.com/javase/6/docs/api/java/lang/Process.html

于 2010-08-31T12:30:56.353 に答える
1

私が間違っていなければ、パイプ、リダイレクトなどはシェルの機能です。この文脈では、これらは単なる議論です。これは、コマンドの一部として/ cスイッチを指定してcmd.exeを使用するのと同じくらい簡単に処理できます。これは正しく処理されるか、標準の入出力を自分で処理できると思います(ただし、問題が発生することで有名ですが、私は何かを好みます。 commons-execのように)。

于 2010-08-31T12:31:38.203 に答える
0

プロセスを操作するのに便利な2つのことを述べたいと思いました。

  1. ProcessBuilderは、プロセスを取得するための優れた方法です(1.5以降のJREで実行することを目的としたコードで)。

  2. のすべての推奨事項を注意深く読み、実装することをお勧めしますRuntime.exec()が実行しない場合。

于 2010-08-31T16:15:03.540 に答える