C # - Захват вывода приложений Windows - PullRequest
0 голосов
/ 24 октября 2011

Мое приложение запускает «C: \ Windows \ System32 \ Msra.Exe» для управления доменным компьютером. Есть ли способ, которым я могу захватить сообщения об ошибках, которые показывает этот msra.Exe. (То есть внутренние сообщения об ошибках из msra.exe, а не из моего приложения.) Само приложение является приложением Windows Forms.

Любая помощь приветствуется.

Код для запуска MSRA приведен ниже ... это всего лишь фрагмент полного приложения.

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");
    }
}

Ответы [ 3 ]

2 голосов
/ 24 октября 2011

Вам нужно http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

[Обновлено, чтобы указать на пример .net]

1 голос
/ 24 октября 2011

Вы используете 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

1 голос
/ 24 октября 2011

Вы можете установить RedirectStandardOutput или RedirectStandardError на true, чтобы иметь возможность читать со стандартного вывода или вывода ошибки процесса.

У вас есть несколько вариантов, как на самом деле читать данные:

  • использовать StandardOutput свойство
  • подписаться на событие OutputDataReceived и вызвать BeginOutputReadLine()

или соответствующие члены для потока ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...