2012-03-05 19 views
2

は、:指定する引数はJavaでは

String[] commands = {"Perl", "-e", "print \"hello world\""} 
ProcessBuilder processBuild = new ProcessBuilder(); 
processBuild.command(commands); 

をC#では、私は同じことを行う必要があるので、私は問題を抱えています事が、私は、個々の文字列として別途filenameargumentsを記入する必要があります。今すぐ

processBuild.FileName = commands[0]; 
for (int x = 1; x < commands.Length; x++) 
{ 
    processBuild.Arguments += " " + commands[x]; 

} 

私は、ユーザーが起動しようとしているように起こっているかわからないので、私はこれが合うように調整することができないことを意図しプログラム。私の上記の解決策の問題は、プロセスがperl -e print "hello world"を実行しようとしていることです。なぜ私はこれをコマンドラインのように扱わなければならないのですか?

もちろん、 "cmd/c echo hello"のようなものがcmd /c "echo" "hello"に変わったので、if !start with [-/] { Surround with quotes }のようなことはできません。私はif/elsesの束を作り、それについて賢明にしようと思うが、もっと良い方法がなければならないだろうか?

だから私はあなたを助けてくれる人に頼ります。どのように私はC#で非cmdのラインファッションで引数を指定するプロセスを開始することができますか?

答えて

1

Processクラスは、プロセスを開始するために利用可能な最も低いレベルのAPIの1つであるフードの下でCreateProcess APIを使用しました。このAPIは実行可能ファイルを引数から分離しています。なぜなら、実行時に同じように区別するのは同じ難点があるからです。

2種類の溶液:

  • スタートcmd.exeのプロセスとして、それを の引数として、あなたの「コマンド」を手。 cmd.exeがあなたのために解析を行います。
  • 難解ですが、自分で解析してください。
+1

それでも、有効な引数文字列を作成する方法を知っている必要があります(引数のリストに解析することができます)。関連する引用の知識が必要ないように、最初に引数のリスト(Unixの 'execv'または' execvp')を提供するだけの方法はありません。 – jamessan

関連する問題