2011-07-19 62 views
5

私はプロセスの実行とargsの渡しにいくつかの問題があります。 私はいくつかの引数C#で実行中のプロセスに引数を渡す

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/c something"); 
Process p = Process.Start(psi) 

問題はスクリプトが実行された後の処理が終了したことにあるとのプロセスを実行する方法を知っています。だからこそ "/ c"がある

私は複数のスクリプトを実行しているので、毎回新しいプロセスを開始しないように1つのプロセス( "cmd.exe")で実行したいと考えています。

いくつかの解決策はありますか?私はあなたがスクリプトにあなたの実行ファイルの実行をバッチファイルを利用し、代わりにあなたのバッチファイルを呼び出すお勧め

+2

最初に考えたのは、バッチファイルを作成することですが、おそらく[タグ:.net]の中には何か良い点があります。 –

+0

引数を渡そうとしているプログラムのアプリケーションロジックを制御していますか? –

答えて

10

);

私は誰かが私が話しているものを理解してほしいです。または、you can do this - もfalsepsi.UseShellExecuteを設定してください -

Process p = new Process(); 
    ProcessStartInfo info = new ProcessStartInfo(); 
    info.FileName = "cmd.exe"; 
    info.RedirectStandardInput = true; 
    info.UseShellExecute = false; 

    p.StartInfo = info; 
    p.Start(); 

    using (StreamWriter sw = new StreamWriter(p.StandardInput)) 
    { 
     if (sw.BaseStream.CanWrite) 
     { 
      sw.WriteLine("mysql -u root -p"); 
      sw.WriteLine("mypassword"); 
      sw.WriteLine("use mydb;"); 
     } 
    } 
+0

あなたは本当にストリームライターのライドラインを行う必要はありません。あなたは単にp.startinfo.filename = "cmd.exe"を呼び出すことができます。 p.startinfo.Arguments = "blah"; p.start(); p.waitforexit(); p.close(); – Grant

+0

とても助かりましたが、まだいくつかの問題があります。 – kosa

+0

私は、プロセスを作成してクラスのコンストラクタで起動し、スクリプトを実行するときにこのクラスからメソッドを呼び出しようとします。しかし、私がプロセスを開始すると、同じ瞬間に終了します – kosa

0

それはあなたが標準入力をリダイレクト検討するべきであるように聞こえます。また、標準出力をリダイレクトして、子プロセスが何をしているかを知ることができます。

リダイレクトの詳細については、hereを参照してください。

+0

あまりにも遅くなった髪 - 0A0Dがそれを持っています。 – Ben

関連する問題