将cmd输出重定向到富文本框文本实时

时间:2015-01-20 07:53:53

标签: c#

当我尝试使用Arguments时:

console.StartInfo.Arguments = "/c ping -t google.co.id";

它有效。 Ping输出显示在richtextbox中。

但是当我尝试使用这个参数时:

console.StartInfo.Arguments = "/c C:\\Plink\\Plink.exe -v -C -N -D 1080 -P 443 myuser@123.123.123 -pw mypassword";

富文本框不显示任何内容。 但当我检查任务经理时,我看到Plink已经在运行。

我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;

namespace output_cmd
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        delegate void UpdateConsoleWindowDelegate(String msg);
        Process console = null;
        StreamWriter consoleStreamWriter = null;

        private void btnCreateConsole_Click(object sender, EventArgs e)
        {
            console = new Process();
            console.StartInfo.FileName = "cmd";
            console.StartInfo.Arguments = "/c C:\\Plink\\Plink.exe -v -C -N -D 1080 -P 443 myuser@123.123.123 -pw mypassword";
            console.StartInfo.UseShellExecute = false;
            console.StartInfo.CreateNoWindow = true;
            console.StartInfo.RedirectStandardInput = true;
            console.StartInfo.RedirectStandardOutput = true;
            console.StartInfo.RedirectStandardError = true;
            console.OutputDataReceived += new DataReceivedEventHandler(ConsoleOutputHandler);
            console.Start();
            consoleStreamWriter = console.StandardInput;
            console.BeginOutputReadLine();
            console.BeginErrorReadLine();
            btnCreateConsole.Enabled = false;
        }


        private void btnTerminate_Click(object sender, EventArgs e)
        {
            if (!console.HasExited)
            {
                console.Kill();
                console.Dispose();
                console = null;
                btnCreateConsole.Enabled = true;
            }
        }

        private void UpdateConsoleWindow(String message)
        {
            if (txtConsoleWindow.InvokeRequired)
            {
                UpdateConsoleWindowDelegate update = new UpdateConsoleWindowDelegate(UpdateConsoleWindow);
                txtConsoleWindow.Invoke(update, message);
            }
            else
            {
                txtConsoleWindow.AppendText(message);
            }
        }

        private void ConsoleOutputHandler(object sendingProcess,
            DataReceivedEventArgs recieved)
        {
            if (!String.IsNullOrEmpty(recieved.Data))
            {
                UpdateConsoleWindow(recieved.Data + "\r\n");

            }
        }

    }
}

我该如何解决这个问题?

更新:对不起,我错了在这里写目录分隔符:D 但这仍然无法解决我的问题

0 个答案:

没有答案