2011-10-24 14 views
0

私のアプリケーションは、ドメインコンピュータを制御するために "C:\ Windows \ System32 \ Msra.Exe"を起動します。このmsra.Exeが示すエラーメッセージをキャプチャする方法はありますか? (つまり、私のアプリケーションからのものではなく、msra.exeからの内部エラーメッセージ) アプリケーション自体はWindowsフォームアプリケーションです。C# - Windowsアプリケーション出力のキャプチャ

何か助けていただければ幸いです。

MSRAを開始するコードは以下の通りです。これは、完全なアプリケーションの単なるスニペットです。 http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

にあなたが必要

string msra = "C:\\Windows\\System32\\runas.exe"; 

string domainname = "**********"; 
string domaincontroller = "*************"; 

if (File.Exists(msra) == false) 
{ 
    System.Windows.Forms.MessageBox.Show("Runas.exe not found.\n\rPlease contact your internal IT support.", "Fatal Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); 
} 
else 
{ 
    try 
    { 
     Process p = new Process(); 
     p.StartInfo.UseShellExecute = true; 
     p.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 
     p.StartInfo.ErrorDialog = true; 
     p.StartInfo.FileName = msra; 
     p.StartInfo.Arguments = "/noprofile /netonly /user:" + domainname + "\\" + username + " \"cmd /server:" + domaincontroller + " /C msra.exe /offerra " + computerip + "\""; 
     p.Start(); 
     p.Dispose(); 
     Thread.Sleep(1700); 
     SendKeys.SendWait(password); 
     SendKeys.SendWait("{ENTER}"); 
    } 
    catch 
    { 
     System.Windows.Forms.MessageBox.Show("MSRA could not be started for an unknown reason"); 
    } 
} 
+0

可能重複[別のプログラムをC#でテキストボックスにコンソール出力をリダイレクト](のhttp:// stackoverflowの.com/questions/415620/redirect-console-output-to-textbox-in-separate-program-c-sharp) – tenfour

答えて

1

あなたの標準出力またはエラー出力から読み取ることができるようにtrueRedirectStandardOutput又はRedirectStandardErrorを設定することができプロセス。

あなたは、その後どのように実際にデータを読み込むために、いくつかのオプションがあります:OutputDataReceivedイベントへ

  • 使用StandardOutputプロパティ
  • subsribeを、エラーストリームのBeginOutputReadLine()

または対応するメンバーを呼び出します。

+0

ありがとうございます - これは本当に進歩する方法です。 – XikiryoX

2

[.NETの例を指すように更新]

+0

このコードは.NetではなくWin32 API用です。 – svick

+0

更新済み - 申し訳ありませんが、私が最初に確認したときに正しく表示されました: –

1

Processを使用していますので、Process.StandardErrorプロパティを試してみてください。これをストリームに割り当てると、それを使用することができます。

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standarderror.aspx

そして、あなたがそこにいる間、あなたもProcess.StandardOutputを使用することができます

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

+0

ありがとうございます - これは確かに進行する方法です。 – XikiryoX

関連する問題