4

コマンドラインから外部プログラムを実行しようとしていますが、呼び出し元のディレクトリにプログラムが存在する場合にのみ実行できることがわかりました。任意のディレクトリからプログラムを実行できるようにしたいと考えています。

Windows(7)のPath変数を設定し、コマンドラインを使用して任意のディレクトリからプログラムを手動で実行できます。ただし、Java を介して行うことはできません。

関連コード:

 Runtime rt = Runtime.getRuntime();

 Process proc = rt.exec(new String[]{"C:\\AutomateKPI\\GetLog.exe", "-e", rossIP});

私の問題は、上記のプログラムの出力により、一般的な名前のファイル「log.txt」が生成されることです。これにより、プログラムをスレッド化するときに問題が発生します。パス変数を使用できない場合は、プログラムを新しいディレクトリにコピーして、後で削除することもできます。そうすることは避けたいと思います。

編集: 上記のコードは、GetLog.exe が C:\AutomateKPI に存在するため機能します。C:\AutomateKPI\*NewDir* から GetLog.exe を実行できるように、%PATH% を参照したいと思います。

4

2 に答える 2

5

を使ってみてくださいProcessBuilder。作業ディレクトリを指定できます。

String commandPath = "C:" + File.pathSeparator +
                     AutomateKPI" + File.pathSeparator + "GetLog.exe";
ProcessBuilder pb = new ProcessBuilder(commandPath, "-e", rossIP);
pb.directory(new File("intendedWorkingDirectory"));
Process p = pb.start();

または、C:\AutomateKPIが次の場所にある場合%PATH%:

ProcessBuilder pb = new ProcessBuilder("GetLog.exe", "-e", rossIP);

ドキュメントからは不明ですが、Windows でProcessBuilderの使用など、システムに似た方法で物事を見つけているようです。%PATH%

于 2012-08-09T14:12:23.043 に答える
0

開いているプログラムのパスを知っていて、cmd を使用する必要がない限り、これは毎回機能するはずです。

File file = new File("File Directory");
Desktop dt = Desktop.getDesktop();

try {
    dt.open(file);
} catch (IOException e1) {
}
于 2012-08-09T14:29:09.687 に答える