如何在不停止其对话框提示的情况下捕获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

如何在不停止其对话框提示的情况下捕获tf.exe stderr

您最好直接调用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