显然我可以使用 cmd 控制台执行某些操作Process.Start();
有没有办法获得该过程的输出?例如,我可以有类似...
Process.Start("sample.bat");
...在我的 C# winforms 应用程序和 sample.bat 中将包含以下内容:
echo sample loaded
第一个问题:有没有办法sample loaded
在bat执行后找回它?第二个问题:有没有办法在不弹出控制台窗口的情况下使用它?
显然我可以使用 cmd 控制台执行某些操作Process.Start();
有没有办法获得该过程的输出?例如,我可以有类似...
Process.Start("sample.bat");
...在我的 C# winforms 应用程序和 sample.bat 中将包含以下内容:
echo sample loaded
第一个问题:有没有办法sample loaded
在bat执行后找回它?第二个问题:有没有办法在不弹出控制台窗口的情况下使用它?
在Process文档中有一个具体如何执行此操作的示例:
// Start the child process.
Process p = new Process();
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "Write500Lines.exe";
p.Start();
// Do not wait for the child process to exit before
// reading to the end of its redirected stream.
// p.WaitForExit();
// Read the output stream first and then wait.
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
是的,您可以使用
Process.Start(ProcessStartInfo)
有几种方法可以连接到 I/O,包括ProcessStartInfo.RedirectStandardOutput
可用的。您可以使用这些重载从批处理文件中读取输出。您还可以挂钩Exited
事件以了解执行何时完成。
用于CreateNoWindow
无窗。
设置process.StartInfo.RedirectStandardOutput
为 true 并订阅process.OutputDataReceived
using (var process = new Process())
{
process.StartInfo = new ProcessStartInfo("exename");
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += (s, ev) =>
{
string output = ev.Data;
};
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
}