4

Runtime.exec() を使用して、スペースのあるディレクトリで別のプロセスを開始したいと思います。(バカみたいだけど、好奇心を満たしたい)

問題の詳細 (簡易版) C:/Program Files/MyProgram にある myprogram.exe があります。

私が観察したこと:1)。Runtime.exec("C://Program Files//MyProgram//myprogram.exe") を呼び出すと、IOException は次のことを示します: エラー コード = 2 でファイル C:/Program が見つかりません。スペースの

2)。私は試しました: Runtime.exec("/"C://Program Files//MyProgram//myprogram.exe/""), IOException は次を示します: ファイルが見つかりません: "C:/Program Files/MyProgram/myprogram. EXE"

3)。教訓を学び、Runtime.exec() のオーバーロード バージョンを試してみました。 File dir = new File("C://Program Files//MyProgram//"); そして実行:Runtime.exec( "myprogram.exe"、null、dir)、それは言う:C:/ Program Files / MyProgram /でファイルmyprogram.exeが見つかりません

4)。1)「Program Files」の代わりに、名前をProgram_Filesに変更しました。すべてが機能します

ProcessBuilderでも似たようなことができるのはわかっているのですが、心では手放せません…(私の弱点なのかもしれませんが)。2) と 3) が機能しない理由を誰か教えてもらえますか?

ありがとう。

4

3 に答える 3

5

数分前に別の答えがあるのを見ました。コメント領域で、私はついにそれを解決する方法を見つけました。その回答がどのように削除されたのか、または誰が回答にコメントして回答したのかわからないので、ごめんなさい...

更新:さらに調査したところ、コメントして正しい答えを出したのはマット・ケインであることがわかりました。何卒よろしくお願い申し上げます。;-)

マットのコメントによると、これが私がそれに取り組む方法であり、動作をテストしました:

String[] cmdArray = new String[]{"C://Program Files//MyProgram//myprogram.exe", arg1, arg2};
Runtime.exec(cmdArray);

ここで、arg1とarg2は、myprogram.exeに渡される2つのパラメーターです。

オーバーロードされたバージョンのexec()を使用します。

1)プロセスexec(String [] cmdarray)

2)プロセスexec(String [] cmdarray、String [] envp)

3)プロセスexec(String [] cmdarray、String [] envp、File dir)

どちらでも動作します。ここで、3)のdirと、cmdarrayの絶対パス(私の場合は「C:// ProgramFiles // MyProgram //」)の違いについて説明します。

3)のdirでは、.exeを実行するディレクトリを指定できます。指定したすべての相対ディレクトリは、このdirの後に追加されます。例:ディレクトリがC:/ Hello Worldで、.exeでファイルを/ folder1に保存する場合、最終的にファイルはC:/ Hello World/folder1にあります。

ただし、dirは実行可能ファイルでは機能しません(私の場合はmyprogram.exeです)。たとえば、.exeがC:/ Program Files / MyProgram /にあり、すでにdirをC:/ Program Files/MyProgramに設定している場合です。実行可能ファイルの絶対パスを指定せずにプログラムを正常に実行することはできません。私の場合、成功できるのは次の方法だけです。cmdarray [0] = "C:// Program Files // MyProgram // myprogram.exe"間違えると、エラーは次のようになります。java.io.exception:プログラム「myprogram.exe」(ディレクトリ「C:/ ProgramFiles / MyProgram /」内)を実行できません:CreateProcess error = 2、システムは指定されたファイルを見つけることができません。「***ディレクトリにファイルが見つかりません」ではなく、「**ディレクトリで実行できません」とだけ表示されることに注意してください。かなりばかげていると思いましたが、とにかくそれは」

于 2009-07-09T19:05:08.757 に答える
0

私は同じ問題を抱えていて、 c:\program files の代わりに c:\PROGRA~1 を使用して解決しました

于 2014-02-24T14:03:39.147 に答える
0

スペースの前にバックスラッシュを入れてみてください... "C:/Program\ and\ Files/MyProgram/myprogram.exe"

OSに渡されるように、二重のバックスラッシュを使用する必要があります。

それでもうまくいかない場合は、「C:/\"Program and Files\"/MyProgram/myprogram.exe」を試してください。

于 2009-07-09T16:47:19.830 に答える