我无法确定这是否是Accurev特有的问题,或者更多的是从C#调用命令行。当我弄清楚它是什么时,我会使问题及其标签更具体。
我已经使用命令提示符成功完成了以下两个调用:
在这两种情况下,我都可以看到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调用期间发生的事情的答案或线索!
答案 0 :(得分:2)
我认为您需要在完成该过程后阅读标准输出。
cmdUtility.WaitForExit();
var s = cmdUtility.StandardOutput.ReadToEnd();
但是,直接读取Accurev输出有时会溢出缓冲区。您可能想要使用异步读取进行调查。 How to spawn a process and capture its STDOUT in .NET?