none
Exeとコマンド実行の違いを教えてください RRS feed

  • 質問

  • お世話になっております。

    素人質問で申し訳ないのですが、ProcessからExeを実行したいのですが正常に動作
    しない為、ぜひご教示願いたいです。

    やりたいこと:
    Postgresqlのpg_dumpを使い、PCからデータを出力したい。

    コード:
    Process.Start("pg_dump.exe", "-h 192.168.1.3 ^p 5432 -U postgres DATABASE > "
            + @"""C:\test.sql""");

    上記のコードがうまく動作しません。

    引数がおかしいのかと、コマンドから直接タイプすると正常に動作します。

    どこがいけないのでしょうか、なにか動作が違うのでしょうか?

    別のアプローチから、コマンドに出力された文字列をファイルに出力しようとしましたが
    そちらもutf8が化けてしまってうまくいきません。

    お願いです、どうかご教示ください。

    2013年12月10日 10:02

回答

  • ">" によるリダイレクトは、cmd.exe独自の機能です。cmd.exeを経由させずにプロセスを動作させた場合はリダイレクトされません。

    cmd.exeをProcess.Startして引数に一連のものを与えればリダイレクトされます。

    あるいは、ProcessStartInfoを使って、RedirectStandardOutput(またはRedirectStandardError)で独自にリダイレクトすることもできます。この場合、同時にStandardOutputEncoding/StandardErrorEncodingで任意のエンコーディングを指定できます。

    • 回答としてマーク コーベル 2013年12月11日 0:14
    2013年12月10日 10:59

すべての返信

  • ">" によるリダイレクトは、cmd.exe独自の機能です。cmd.exeを経由させずにプロセスを動作させた場合はリダイレクトされません。

    cmd.exeをProcess.Startして引数に一連のものを与えればリダイレクトされます。

    あるいは、ProcessStartInfoを使って、RedirectStandardOutput(またはRedirectStandardError)で独自にリダイレクトすることもできます。この場合、同時にStandardOutputEncoding/StandardErrorEncodingで任意のエンコーディングを指定できます。

    • 回答としてマーク コーベル 2013年12月11日 0:14
    2013年12月10日 10:59
  • Hongliang さん
    ご回答ありがとうございます。

    そういうことだったのですね、勉強になりましたありがとうございます!

    別のアプローチとは、ProcessStartInfoだったのですが、Encodingの設定が
    解らなかったところです。

    本当にありがとうございました!

    2013年12月11日 0:14