c# - 生成进程时如何重定向标准输出

标签 c# asp.net-mvc-3 .net-4.0 redirectstandardoutput

我已经为我想向其发送命令并启动进程的内部服务器构建了一个网络服务。所以我想像这样向它发送命令:

http://machine:999/execute?path=c:\scripts\dostuff.exe&args=-test

端点然后会做这样的事情:

public ActionResult(string path, string args)
{

    var proc = new System.Diagnostics.Process();
    proc.StartInfo.FileName = path;
    proc.StartInfo.Arguments = args;
    proc.StartInfo.UseShellExecute = false;
    proc.StartInfo.CreateNoWindow = true;
    proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    proc.StartInfo.RedirectStandardOutput = true;

    //Hook into all standard output here

    //Block until process is returned - Async Controller action

    return Content(output.ToString())
}

我希望能够捕获可执行文件生成的所有错误消息和标准输出。可执行文件可以是控制台应用程序或 powershell 脚本之类的任何东西。执行此类操作的最佳方法是什么?

最佳答案

使用 proc.StandardOutput.ReadToEnd() 将重定向的输出流读取到末尾,然后返回。

您可能还想将 RedirectStandardError 设置为 True,并对 proc.StandardError 执行相同的操作以获取错误消息。您可以生成一个后台线程以在主线程中读取标准输出的同时同步读取标准错误。

关于c# - 生成进程时如何重定向标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6099951/

相关文章:

c# - 在 foreach(单词中的字符串单词)中,如果 (if->true) C#,我如何转到下一个单词?

C# JSON 反序列化 null 嵌套属性

c# - 绑定(bind)对象永远不会为空

asp.net - 在 ASP MVC3 中,如何使用 uri 执行 Controller 和 Action ?

c# 多个调度选项?

c# - String.GetHashCode() 返回不同的值

c# - 通过 Entity Framework 执行 SProc 时未获取毫秒数据

c# - 如何在linq中选择最大的字符串到nhibernate

asp.net - MVC 3 中的 Windows 身份验证

c# - 特定于 ASP.NET Web API 中的 Controller 的自定义委托(delegate)处理程序