none
ProcessStartInfoクラスを使用してプロセスの起動 RRS feed

  • 質問

  • 開発環境:Visual Studio Community 2015(C#)

    コマンドプロンプトでは”proc.exe > ./log/01.log”の様に呼び出していたことを、

    ProcessStartInfoでも同様に実施したいと思っているのですがうまくいきません。

    上記の様な使用はできないのでしょうか?

    ProcessStartInfo pInfo = new ProcessStartInfo();
    pInfo.FileName = @"C:\proc.exe";
    pInfo.Arguments = "> ./log/01.log";
    Process.Start(pInfo);


    2020年5月19日 3:04

回答

  • リダイレクト記号 ">" はcmd.exeの機能なので、直接実行ファイルを実行する場合は有効ではありません。

    cmd.exeを介して実行する方法と、自分でリダイレクト処理を記述する方法があります。

    cmd.exeを介する場合、FileNameにはcmd.exeを、Argumentsにはコマンドプロンプトで記述するコマンド文字列を指定して実行します。コマンド終了後にcmd.exeが終了するよう、冒頭に/cオプションをつけるのが一般的です。

    自分でリダイレクト処理を記述する場合、ProcessStartInfoのRedirectStandardOutputをtrueにしておき(あとUseShellExecuteをfalseにする必要もあります)、Process.Start後に、ProcessのStandardOutputプロパティを使って出力された文字列を読み取って、StreamWriterなどを使ってファイルに出力していきます。

    2020年5月19日 3:41

すべての返信

  • リダイレクト記号 ">" はcmd.exeの機能なので、直接実行ファイルを実行する場合は有効ではありません。

    cmd.exeを介して実行する方法と、自分でリダイレクト処理を記述する方法があります。

    cmd.exeを介する場合、FileNameにはcmd.exeを、Argumentsにはコマンドプロンプトで記述するコマンド文字列を指定して実行します。コマンド終了後にcmd.exeが終了するよう、冒頭に/cオプションをつけるのが一般的です。

    自分でリダイレクト処理を記述する場合、ProcessStartInfoのRedirectStandardOutputをtrueにしておき(あとUseShellExecuteをfalseにする必要もあります)、Process.Start後に、ProcessのStandardOutputプロパティを使って出力された文字列を読み取って、StreamWriterなどを使ってファイルに出力していきます。

    2020年5月19日 3:41
  • ご回答ありがとうございました。

    上記方法で試してみます。

    2020年5月19日 4:03