【问题标题】:Calling Accurev "hist" from C# process从 C# 进程调用 Accurev “hist”
【发布时间】:2014-05-28 03:50:10
【问题描述】:

我不能确定这是 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 call 期间发生的事情的答案或线索!

【问题讨论】:

  • _streamName - 它是否在您的程序中包含完整路径?如果不是,您可以尝试提供完整路径吗?
  • 它不包含完整路径,因为它不是我机器上的流 - 基本上我希望查询团队共享的流(即,不是本地工作区)。干杯

标签: c# command-line-interface accurev


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-13
    • 2016-10-24
    • 2015-06-18
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2011-06-20
    相关资源
    最近更新 更多