2014年11月30日

C#で指定コマンドを別プロセスで起動

   このエントリーをはてなブックマークに追加 Clip to Evernote
どう書く?orgに感謝を込めて」シリーズ その52

■問題 (出題者 : todogzm さん)
与えられた文字列のコマンドを、別プロセスで実行してください。 異なるPIDのプロセスが立ち上がり、指定したコマンドを実行することが条件です。
あわせて、実行結果のリターンコードと、別プロセスが出力した標準出力を受け取る方法も記載してください。
今回投稿する上で、別プロセスとして実行するコマンドの与え方は自由ですが、実行した結果、何らかの損害を与えるようなコマンドは埋め込まないようにお願いします。

以前掲載した「外部の実行ファイルを呼び出し」と「標準入力と標準出力のリダイレクト」の知識があれば、難しくありませんね。
起動したコマンドが出力した標準出力の内容を取り込めるので、知っていれば役立つときがあるかもしれません。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace Doukaku.Org {
    class Program {
        static void Main() {

            // 標準出力をリダイレクトしてプロセスを起動
            string cmd = "help xcopy";
            int ix = cmd.IndexOf(' ');
            string pgm = (ix >= 0) ? cmd.Substring(0, ix) : cmd;
            string args = (ix >= 0) ? cmd.Substring(ix + 1) : "";
            Process p = new Process();
            ProcessStartInfo psi = new ProcessStartInfo(pgm);
            psi.Arguments = args;
            psi.RedirectStandardOutput = true;
            psi.UseShellExecute = false;
            p.StartInfo = psi;
            p.Start();

            // リダイレクトされた標準出力を読む
            string output = p.StandardOutput.ReadToEnd();

            // プロセス終了を待つ
            p.WaitForExit();

            // 結果を標準出力に表示する
            Console.WriteLine(output);

            // 終了コードの取得
            Console.WriteLine("終了コード={0}", p.ExitCode);

            Console.ReadLine();
        }
    }
}



 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52385002