如何在不停止其对话框提示的情况下捕获tf.exe stderr
本文关键字:情况下 tf stderr exe 提示 不停止 对话框 | 更新日期: 2023-09-27 18:22:38
我正在尝试编写一个应用程序,为tf.exe(在TFS 2010中)提供我自己的UI。(是的,我知道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"时,我注意到当标准错误被重定向时,我不再看到通常打开的签入对话框。相反,签入只是发生了。因此,重定向tf.exe的stderr的行为似乎就像我设置了noprompt标志一样。有人知道我如何在不停止tf.exe对话框提示的情况下捕获stderr数据吗?
谢谢,
-Craig
您最好直接调用TFS API,而不是从代码中调用tf.exe。这样,您将对应用程序的行为和异常的所有好处有更多的控制,而不是stderr。API还提供了比tf.exe tfpt.exe和visualstudio更多的功能。
在为此感到沮丧数月后,我终于找到了解决方案。
显然,tf.exe有一个隐藏的参数,名为/prompt,即使您重定向了stdout,它也会强制显示UI。
来源:http://www.wintellect.com/cs/blogs/jrobbins/archive/2006/12/26/working-offline-with-tfs.aspx