-3

显然我可以使用 cmd 控制台执行某些操作Process.Start();

有没有办法获得该过程的输出?例如,我可以有类似...

Process.Start("sample.bat");

...在我的 C# winforms 应用程序和 sample.bat 中将包含以下内容:

echo sample loaded 

第一个问题:有没有办法sample loaded在bat执行后找回它?第二个问题:有没有办法在不弹出控制台窗口的情况下使用它?

4

3 回答 3

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();
于 2013-06-03T19:23:06.073 回答
0

是的,您可以使用

Process.Start(ProcessStartInfo)

有几种方法可以连接到 I/O,包括ProcessStartInfo.RedirectStandardOutput可用的。您可以使用这些重载从批处理文件中读取输出。您还可以挂钩Exited事件以了解执行何时完成。

用于CreateNoWindow无窗。

于 2013-06-03T19:25:09.030 回答
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();
}
于 2013-06-03T19:25:11.963 回答