致电Accurev" hist"来自C#进程

时间:2014-03-29 23:02:27

标签: c# command-line-interface accurev

我无法确定这是否是Accurev特有的问题,或者更多的是从C#调用命令行。当我弄清楚它是什么时,我会使问题及其标签更具体。

我已经使用命令提示符成功完成了以下两个调用:

  • accurev stat -d -s" ProductionSupport" -fx
  • accurev hist -s" ProductionSupport" -ftx -e" 1570567"

在这两种情况下,我都可以看到xml。

但是我想从C#程序中调用这些调用,第一个调用很好但是莫名其妙地第二个返回一个空字符串。

    public string CallAccurev(string arguments)
    {
        Process cmdUtility = new Process
        {
            StartInfo =
            {
                FileName = "C:\\Program Files (x86)\\AccuRev v5.5\\bin\\accurev.exe",
                Arguments = arguments,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true
            }
        };
        cmdUtility.Start();
        var s = cmdUtility.StandardOutput.ReadToEnd();
        cmdUtility.WaitForExit();
        return s;
    }

我的电话看起来像这样:

var checkInComment = CallAccurev("hist -s " + _streamName + " -e " + Convert.ToString(processedFile.TransId) + " -ftx");

var filesString = CallAccurev("stat -d -s " + _streamName + " -fex");

为了解决这个问题,我尝试过将我的" hist"将其及其参数调用到.Bat文件中。我可以看到双击该文件给出了预期的行为,但是当我从代码中调用它时,我再次得到空字符串。

非常感谢任何关于如何调试我的hist调用期间发生的事情的答案或线索!

1 个答案:

答案 0 :(得分:2)

我认为您需要在完成该过程后阅读标准输出。

cmdUtility.WaitForExit();
var s = cmdUtility.StandardOutput.ReadToEnd();

但是,直接读取Accurev输出有时会溢出缓冲区。您可能想要使用异步读取进行调查。 How to spawn a process and capture its STDOUT in .NET?