c# - 从 C# 进程调用 Accurev "hist"

标签 c# command-line-interface accurev

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

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

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

非常感谢有关如何调试我的历史通话期间发生的情况的任何答案或线索!

最佳答案

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

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

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

关于c# - 从 C# 进程调用 Accurev "hist",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22738054/

相关文章:

accurev - 如何按日期弹出accurev流?

c# - ASP.NET MVC 4 - 在主页上登录

c# - 读取xml文件并将id的值写入C#中的相关文本框中

c# - 当对象超出 C# 范围时?

perl - 如何在命令行中将哈希作为可选参数传递给 -M

PHP,将参数从命令行传递到 PHP 脚本

java - errorNoSuchMethodError : java. util.stream.Stream.toList()Ljava/util/List 仅来自 CLI,来自 eclipse 很好

python - Win错误3 : File not found using ac2git

git - Accurev 工作原理的一句话解释是什么?

C# 如何使用 NAudio API 从输出设备(扬声器)录制一般音频