显然我可以使用Process.Start();
有没有办法获得该流程的输出?例如,我可能会有类似......
Process.Start("sample.bat");
...在我的C#winforms应用程序和sample.bat中将包含类似的内容:
echo sample loaded
第一个问题:有没有办法在蝙蝠执行后检索sample loaded
?
第二个问题:有没有办法在没有弹出控制台窗口的情况下使用它?
答案 0 :(得分:5)
在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();
答案 1 :(得分:0)
是的,您可以使用
Process.Start(ProcessStartInfo)
有几种方法可以挂钩I / O,包括ProcessStartInfo.RedirectStandardOutput
可用。您可以使用这些重载来读取批处理文件的输出。您还可以挂钩Exited
事件以了解执行何时完成。
使用CreateNoWindow
无窗口。
答案 2 :(得分:0)
将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();
}