C# 为什么这个C代码不起作用?我正在尝试读取龟壳的输出(Mercurial)

C# 为什么这个C代码不起作用?我正在尝试读取龟壳的输出(Mercurial),c#,mercurial,tortoisehg,C#,Mercurial,Tortoisehg,我试图让mercurial在我的C#wpf应用程序的shell中运行。我的目的是将输出检索为字符串,以便对其进行解析 不幸的是,hg.exe(来自于tortoiseHg)似乎没有通过下面的代码返回任何内容。其他的.exe似乎可以工作,如下面的评论所示 我的代码如下 ` 如果有人能提出为什么这段代码不起作用,或者提出另一种检索mercurial命令行输出的方法,我将非常感激 谢谢我猜是有输出会变成标准错误 本页介绍如何执行此操作: 我想你可能需要一个 proc.WaitForExit(); 在你

我试图让mercurial在我的C#wpf应用程序的shell中运行。我的目的是将输出检索为字符串,以便对其进行解析

不幸的是,hg.exe(来自于tortoiseHg)似乎没有通过下面的代码返回任何内容。其他的.exe似乎可以工作,如下面的评论所示

我的代码如下

`

如果有人能提出为什么这段代码不起作用,或者提出另一种检索mercurial命令行输出的方法,我将非常感激


谢谢

我猜是有输出会变成标准错误

本页介绍如何执行此操作:


我想你可能需要一个

proc.WaitForExit();

在你的阅读结束通话之前?除非进程是交互的,否则您会有不同的问题。

< P>您可以考虑处理Purrest.OutPuttAdAccess和ErrRoDATAsAccess事件:

proc.ErrorDataReceived += delegate(object o, DataReceivedEventHandler e)
  {
      if (e.Data != null) { /* e.Data is the string from the process */ }
  };
proc.OutputDataReceived += delegate(object o, DataReceivedEventHandler e)
  {
      // ...
  };
启动进程后,请务必调用
proc.BeginErrorReadLine()
proc.BeginOutputReadLine()

如果我将完整路径传递给可执行文件,则您的代码对我有效(使用TortoiseHg 2.0.2测试):

proc.StartInfo.FileName = "C:\\Program Files (x86)\\TortoiseHg\\hg.exe";

它可能是在写标准错误?(无耻的插件)嗨,我已经开始研究Mercurial命令行包装器,它将解析所有Mercurial输出和命令并将其转换为更多的C#-y语法。如果你感兴趣,你可以在这里关注这个项目:任何最终解决方案都有完整的源代码样本在工作?任何最终解决方案都有完整的源代码样本在工作?
proc.StartInfo.FileName = "C:\\Program Files (x86)\\TortoiseHg\\hg.exe";