命令行接口-调用Accurev " history "从c#进程

本文关键字:quot 进程 history 调用 命令行接口 Accurev | 更新日期: 2023-09-27 17:54:48

我不能确定这是Accurev特有的问题,还是与从c#调用命令行有关。当我弄清楚是哪个问题时,我会让问题和它的标签更具体。

我有以下两个调用,我可以使用命令提示符成功地进行:

  • accurev stat -d -s "ProductionSupport" -fx
  • accurev history -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文件中。我可以看到双击该文件给出了预期的行为,但当我从代码中调用它时,我再次得到空字符串。

任何关于如何调试在我的历史呼叫中发生的事情的答案或线索都非常感谢!

命令行接口-调用Accurev " history "从c#进程

我认为您需要在流程完成后读取标准输出。

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

然而,直接读取Accurev输出有时会溢出缓冲区。您可能想要研究使用异步读取。如何在。net中生成一个进程并捕获它的STDOUT ?