0

exec 関数を使用しようとしています。実行可能ファイルへのパスにスペースが含まれており、これは私に悲しみを与えています。私のコードは次のようになります

Runtime.getRuntime().exec("\"C:\\Program Files (x86)\\ASL\\_ASL Software Suite_installation.exe\"", null, new File("\"C:\\Program Files (x86)\\ASL\\_ASL Software Suite_installation\""));

これが実行されると、例外が発生します-

Cannot run program ""c:\Program" 

誰かがこれを解決するのを手伝ってくれるなら、私は感謝します

前もって感謝します

4

2 に答える 2

4

からRuntime.exec(String command, String[] envp, File dir):

指定された環境と作業ディレクトリを使用して、指定された文字列コマンドを別のプロセスで実行します。

これは便利な方法です。フォームの呼び出しは、呼び出しとexec(command, envp, dir)まったく同じように動作しますexec(cmdarray, envp, dir)。ここcmdarrayで、 は 内のすべてのトークンの配列ですcommand

より正確には、文字カテゴリをさらに変更することなく、呼び出しによって作成されたcommandを使用して、文字列がトークンに分割されます。トークナイザーによって生成されたトークンは、同じ順序で新しい文字列配列に配置されます。StringTokenizernew StringTokenizer(command)cmdarray

これは、外側の引用符に関係なく、最初の文字列がトークンに分割されることを意味します。バージョンを使用してRuntime.exec(String[] cmdarray, String[] envp, File dir)、実行可能パスのトークン化を回避します。

または、次を使用しますProcessBuilder

File d = new File("C:/Program Files (x86)/ASL/_ASL Software Suite_installation");
ProcessBuilder pb = new ProcessBuilder(d.getAbsolutePath() + "/main.exe");
Process p = pb.directory(d)
              .start();

見る:

于 2013-07-17T09:30:41.230 に答える
-1

ファイル名をもう一度引用する必要はありません。Javaがそれを処理します。適切なファイル名を次のような文字列として指定するだけです

Runtime.getRuntime().exec(
    "C:\\Program Files (x86)\\ASL\\_ASL Software Suite_installation.exe", 
    null, 
    new File("C:\\Program Files (x86)\\ASL\\_ASL Software Suite_installation"));
于 2013-07-17T09:31:09.280 に答える