Ввод и вывод из оболочки cmd.exe - PullRequest
4 голосов
/ 29 мая 2011

Я пытаюсь создать проект Windows Forms C #, который взаимодействует с оболочкой командной строки (cmd.exe).

Я хочу открыть командную строку, отправить команду (например, ipconfig) и затем прочитать результаты обратно в форму окна в строку, текстовое поле или что-то еще.

Вот то, что у меня есть, но я застрял.Я не могу написать или прочитать в командной строке.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;


namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.Arguments = "/k dir *.*";
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;

            p.Start();

            StreamWriter inputWriter = p.StandardInput;
            StreamReader outputWriter = p.StandardOutput;
            StreamReader errorReader = p.StandardError;
            p.WaitForExit();

        }
    }
}

Любая помощь будет принята с благодарностью.

Спасибо.

Ответы [ 2 ]

1 голос
/ 29 мая 2011

Вот такой вопрос, который даст вам необходимую информацию:

Как: выполнить командную строку в C #, получить результаты STD OUT

В основномвы читаете на вашем System.IO.StreamReader.

Так, например, в вашем коде вы должны изменить строку StreamReader errorReader = p.StandardError;, чтобы она читалась как

using(StreamReader errorReader = p.StandardError)
{
   error = myError.ReadToEnd();
}
0 голосов
/ 29 мая 2011
  var yourcommand = "<put your command here>";

  var procStart = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + yourcommand);
  procStart.CreateNoWindow = true;
  procStart.RedirectStandardOutput = true;
   procStart.UseShellExecute = false;

   var proc = new System.Diagnostics.Process();
   proc.StartInfo = procStart;
   proc.Start();
   var result = proc.StandardOutput.ReadToEnd();

   Console.WriteLine(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...