我正在尝试编写一个为 tf.exe (在 TFS 2010 中)提供我自己的 UI 的应用程序。(是的,我知道 VS 已经这样做了,但这个应用程序是自定义的)。对于某些命令,例如属性,我想从标准输出捕获输出。此外,当命令失败时,我想从 stderr 捕获其错误输出。我正在使用 .NET 的 Process 类来启动 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”时,我注意到当标准错误被重定向时,我不再看到通常打开的签入对话框。相反,签入只是发生了。因此,似乎为 tf.exe 重定向 stderr 的行为就像我设置了 noprompt 标志一样。有谁知道如何在不停止 tf.exe 对话框提示的情况下捕获标准错误数据?
谢谢,
-克雷格