質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

11822閲覧

C#でshell実行したプログラムの結果を戻り値としてリダイレクトできない

ksakurai

総合スコア17

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2017/05/20 03:28

いつもお世話になっております。

C#で、shell実行し、標準出力された結果をリダイレクトして、
戻り値として取得するプログラムを作成したのですが、
ビルドしたプログラムを別のPCで実行すると、
戻り値がうまく取得できません。

考えられる原因など、何かご存知の方がいらっしゃいましたら、
ご教示願えませんでしょうか。

■アプリケーションの基本情報
フレームワーク : .NET Framwork4.5.2
IDE : Visual Studio 2017
プラットフォーム : x64

■戻り値が取得できないPCの環境
OS:Windows7 Pro 64bit
CPU:Core i5 4590 3.3GHz

C#

1public string execute(string args) 2{ 3 System.Diagnostics.Process p = new System.Diagnostics.Process(); 4 5 p.StartInfo.FileName = exe_path; 6 p.StartInfo.UseShellExecute = false; 7 p.StartInfo.RedirectStandardOutput = true; 8 p.StartInfo.RedirectStandardInput = false; 9 p.StartInfo.CreateNoWindow = true; 10 p.StartInfo.Arguments = args; 11 p.Start(); 12 13 string results = p.StandardOutput.ReadToEnd(); 14 15 p.WaitForExit(); 16 p.Close(); 17 18 return results; 19} 20

宜しくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bongo

2017/05/20 03:43

「うまく取得できない」とおっしゃるのは、例外が発生するわけではなく、戻ってきたresultsがおかしな値であるということでしょうか。そのあたりをお示しいただくと手掛かりになるかもしれません。
guest

回答3

0

exe_path を確認してください。
p.WaitForExit() をその前の行と入れ替えてください。

投稿2017/05/20 03:32

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

パッと見ですがご提示のコード上は問題なさそうに見えます。
もし、実行するファイル(exe_path)の中でリダイレクトしているなら標準出力には出力されません。

投稿2017/05/20 03:53

編集2017/05/20 04:07
hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2017/05/20 04:03

いや、すみません。この場合は Process p で作った子プロセスの標準出力をリダイレクトして親プロセスが Stream として得ていると言いたかったんです。RedirectStandardOutput が true に設定されており、p.StandardOutput へリダイレクトされています。
hihijiji

2017/05/20 04:08

こちらこそすみません。 書き直しました。
guest

0

自己解決

申し訳ありません。
戻り値が取得できていなかったのではなく、warningが出力されていました。
実行ファイルの設定に問題があったようです。
確認不足で申し訳ありませんでした。
ご回答いただきありがとうございました。

投稿2017/05/20 04:09

ksakurai

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問