我正在尝试创建一个与命令提示符shell(cmd.exe)交互的Windows Forms 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();
}
}
}
非常感谢任何帮助。
感谢。
答案 0 :(得分:1)
这是一个SO问题,可以为您提供所需的信息:
How To: Execute command line in C#, get STD OUT results
基本上,你在System.IO.StreamReader上使用ReadToEnd。
因此,例如,在您的代码中,您可以将行StreamReader errorReader = p.StandardError;
修改为
using(StreamReader errorReader = p.StandardError)
{
error = myError.ReadToEnd();
}
答案 1 :(得分:0)
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);