我是C#的新手。我正在尝试调用“子进程”并检索其标准输出。在上面的例子中,我执行了几个测试。一些测试在VisualStudio中完成(在“调试”模式下),一切都按预期工作,没有异常:) 最终的应用程序编译然后启动。问题来了......
所以,据我所知,第二部分适用于“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(); //
//==============================================================================================//