我正在尝试编写一个为tf.exe提供自己的UI的应用程序(在TFS 2010中)。 (是的,我知道VS已经这样做但这个应用程序是自定义的)。对于某些命令,如属性,我想从stdout捕获输出。此外,当命令失败时,我想从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”,我注意到当重定向标准错误时,我不再看到通常打开的签入对话框。相反,签到就好了。因此,似乎重定向stderr for tf.exe就像我设置了noprompt标志一样。有没有人知道如何在不停止tf.exe对话框提示的情况下捕获stderr数据?
谢谢,
-Craig
答案 0 :(得分:2)
最好直接调用TFS API而不是从代码调用tf.exe。这样你就可以更好地控制应用程序的行为和异常的所有好处,而不是stderr。 API还提供了比tf.exe tfpt.exe和visual studio更多的功能。
答案 1 :(得分:1)
最后,经过几个月的沮丧,我找到了解决方案。
显然有一个名为/ prompt的tf.exe隐藏参数,即使您重定向了stdout,也会强制显示UI。
来源:http://www.wintellect.com/cs/blogs/jrobbins/archive/2006/12/26/working-offline-with-tfs.aspx