我无法确定这是否是 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/