输入&;cmd.exe shell的输出

本文关键字:shell 输出 exe cmd amp 输入 | 更新日期: 2023-09-27 17:57:58

我正在尝试创建一个与命令提示符shell(cmd.exe)交互的Windows窗体C#项目。

我想打开一个命令提示符,发送一个命令(如ipconfig),然后将结果读取回windows窗体中的字符串、文本框或其他内容。

这是我到目前为止所拥有的,但我被卡住了。我无法对命令提示符进行写入或读取。

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();
        }
    }
}

如有任何帮助,我们将不胜感激。

谢谢。

输入&;cmd.exe shell的输出

这里有一个SO问题,它将为您提供所需的信息:

如何:在C#中执行命令行,获得STD OUT结果

基本上,您可以在系统上读取结束。IO.StreamReader.

因此,例如,在您的代码中,您可以修改行StreamReader errorReader = p.StandardError;以读取

using(StreamReader errorReader = p.StandardError)
{
   error = myError.ReadToEnd();
}
  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);