C#无法将“git”进程重定向到标准输出

时间:2018-04-12 19:25:18

标签: c# git redirect output

我是C#的新手。我正在尝试调用“子进程”并检索其标准输出。在上面的例子中,我执行了几个测试。一些测试在VisualStudio中完成(在“调试”模式下),一切都按预期工作,没有异常:)     最终的应用程序编译然后启动。问题来了......

  1. 第一部分,...开始(si)工作正常
  2. 第二部分,有... Start()显示终端命令而没有文本(OK),但我从未从标准输出/错误中检索任何文本(proc_output和proc_error为空)
  3. 如果我用“systeminfo”从“git”更改String cmd_arg ...,重新编译并重新启动,这次第二部分工作! (proc_output包含大量文本)
  4. 所以,据我所知,第二部分适用于“systeminfo”,但不适用于“git”。我观察到“git”启动子进程(线程),但我不知道这是否是根本原因。   我非常感谢任何帮助:) TIA

    代码

    //==============================================================================================//
    String cmd_exe = "cmd.exe";                                                                     //
    String cmd_arg = String.Format("/c \"{0}\"", "systeminfo");                                     //
    //==============================================================================================//
    System.Diagnostics.ProcessStartInfo si = new ProcessStartInfo();                                //Always work, terminal window appears and text visible
    si.FileName               = cmd_exe                       ;                                     //
    si.Arguments              = cmd_arg                       ;                                     //
    si.UseShellExecute        = false                         ;                                     //
    si.WindowStyle            = ProcessWindowStyle.Normal     ;                                     //
    si.WorkingDirectory       = Pack.SIM_DIR.Replace('/','\\');                                     //
    System.Diagnostics.Process.Start(si);                                                           //Standardoutput is sent to screen
    //==============================================================================================//
    System.Diagnostics.Process proc = new System.Diagnostics.Process();                             //Work within VisualStudio, DOES NOT work when the C# application is called as "sub" process
    proc.StartInfo                        = si                       ;                              //  Take exactly the same information as previous
    proc.StartInfo.RedirectStandardOutput = true                     ;                              //  Redirect output
    proc.StartInfo.RedirectStandardError  = true                     ;                              //  Redirect error
    proc.OutputDataReceived              += new DataReceivedEventHandler(proc_OutputDataReceived);  //  
    proc.ErrorDataReceived               += new DataReceivedEventHandler(proc_ErrorDataReceived);   //  
    proc_output = ""; proc_output_empty = true;                                                     //
    proc_error  = ""; proc_error_empty  = true;                                                     //
    proc.Start();                                                                                   //VisualStudio=OK  MSim=KO
    proc.BeginOutputReadLine();                                                                     // 
    proc.BeginErrorReadLine();                                                                      //
    proc.WaitForExit(10 * 1000);                                                                    // 
    proc.Close();                                                                                   //
    //==============================================================================================//
    

0 个答案:

没有答案