Я пытаюсь написать приложение, предоставляющее собственный интерфейс для tf.exe (в TFS 2010). (да, я знаю, VS уже делает это, но это приложение на заказ). Для некоторых команд, таких как свойства, я хочу захватить вывод из stdout. Кроме того, когда команда терпит неудачу, я хочу захватить ее вывод ошибок из stderr. Я использую класс Process .NET для запуска tf.exe, вот так:
try
{
sccProcess.StartInfo.FileName = "tf.exe";
sccProcess.StartInfo.Arguments = arguments;
sccProcess.StartInfo.CreateNoWindow = true;
sccProcess.StartInfo.UseShellExecute = false;
sccProcess.StartInfo.RedirectStandardOutput = true;
sccProcess.StartInfo.RedirectStandardError = true;
sccProcess.Start();
output = sccProcess.StandardOutput.ReadToEnd();
// Redirecting synchronously from output and error streams may cause a deadlock.
// To prevent that, we always read the error stream asynchronously.
sccProcess.ErrorDataReceived += (sender, args) => errorStringBuilder.Append(args.Data);
sccProcess.BeginErrorReadLine();
sccProcess.WaitForExit();
exitCode = sccProcess.ExitCode;
error = errorStringBuilder.ToString();
}
catch (Win32Exception)
{
// The file name for the process couldn't be found.
exitCode = -1;
}
finally
{
sccProcess.Close();
}
Однако, когда я запускаю команду, скажем «tf checkin», я замечаю, что, когда стандартная ошибка перенаправляется, я больше не вижу диалоговое окно возврата, которое обычно открывается. Вместо этого регистрация просто происходит. Таким образом, похоже, что перенаправление stderr для tf.exe ведет себя так, как будто я установил флаг noprompt. Кто-нибудь знает, как я могу захватить данные stderr без остановки диалоговых окон tf.exe?
Спасибо
-Craig