0

xyz.cmddirectory にあるファイルを実行する必要がありますE:/abc。したがって、実行するファイルの絶対パスはE:/abc/xyz.cmd. 実行すると、ファイル自体によって新しいウィンドウが作成されます。

私のコードスニペットは次のとおりです:-

String path = “E:\\abc”;
String cmd = path + “\\xyz.cmd”;
ProcessBuilder processBuilder = new ProcessBuilder(cmd);
processBuilder.redirectErrorStream(true);
processBuilder.directory(new File(path));
processBuilder.start();

これは機能しませんが、エラーや例外は発生しません。ただし、cmd ファイルは問題なく動作します。エクスプローラーまたは cmd-prompt を使用して、そのディレクトリから手動で実行できます。さまざまなバージョンの jdk を使用してみましたが、無駄でした。Windows 7 OS を使用しています。タスク マネージャーでも実行中のプロセスが表示されません。何がうまくいかないのですか?同じコードは、同じ構成の別のコンピューターで正常に動作します。

===編集==== これはセキュリティ上の問題でしょうか? プログラムを実行しているユーザーがファイルを実行するのに十分な権限を持っていないようなものですか?

4

1 に答える 1

2

cmd.exeコマンド プロセッサが .cmd ファイルを呼び出せるようにするには、プロセス ビルダー文字列の最初の部分として呼び出す必要があります。これは、.bat ファイル、または任意の OS タイプのコマンドにも当てはまります。たとえば、こちらをご覧ください

また、こちらもご覧ください: When Runtime.exec() will not

あなたの状態を編集
:

これは、プロセスビルダーに cmd.exe を追加しないという問題ではありません。前のコマンドにより、cmd.exe が処理されます。

これまでのところ、これが真実であるという文書はあなたの投稿にありません。私の経験から、そうではないことが強く示唆されています。

また、次のようにも述べています。

これはセキュリティ上の問題になる可能性がありますか? プログラムを実行しているユーザーがファイルを実行するのに十分な権限を持っていないようなものですか?

プロセスの入力ストリームをキャプチャして表示しない限り、知る方法はありません。実際、このストリームをキャプチャしないと、プロセスがまったく機能しなくなる可能性があります。多くの場合、エラー ストリームもキャプチャする必要がありますが、それらを

processBuilder.redirectErrorStream(true)

ストリームをキャプチャする必要性について詳しくは、上記の「Runtime.exec() が機能しない場合」のリンクをお読みください。

于 2012-06-12T14:48:40.283 に答える