C# Process调用cmd问题请教

milestone_2010 2016-04-12 02:50:22
各位:

最近使用C#和C编写了一个应用程序,为了便于查看程序内部信息。打算在界面上点击一个按钮,触发调用cmd。在cmd窗口手动输入命令后,界面解析命令,进而调用不同的C函数,并将函数的printf结果输出到cmd中。
现在遇到点问题,通过Process调用cmd之后,窗口内不能输入,请问是怎么回事。Process调用cmd命令如下:
private string RunCmd()
{
//例Process
Process p = new Process();
p.StartInfo.FileName = "cmd.exe"; //确定程序名
p.StartInfo.UseShellExecute = false; //Shell的使用
p.StartInfo.RedirectStandardInput = true; //重定向输入
p.StartInfo.RedirectStandardOutput = true; //重定向输出
p.StartInfo.CreateNoWindow = false; //设置不显示窗口

p.Start();
p.StandardInput.WriteLine();
return p.StandardOutput.ReadToEnd();
}
...全文
601 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
milestone_2010 2016-05-03
  • 打赏
  • 举报
回复
好了,想到别的办法了,感谢各位的帮助。 用下面的代码能实现我的要求,具体如下: [DllImport("kernel32.dll")] public static extern bool AllocConsole(); [DllImport("kernel32.dll")] public static extern bool FreeConsole(); private void RunCmd() { AllocConsole(); Console.WriteLine("Please Input the debug command!"); bool Flag = true; while (Flag) { string strnew = Console.ReadLine(); if ("AB" == strnew) { FUN_AB(); } else if ("CD" == strnew) { FUN_CD(); } else if ("exit" == strnew) { MediaApi.ClassMediaApi.Md_NewDebugTestExit(); break; } else { FUN_ERROR(); } } FreeConsole(); }
milestone_2010 2016-05-03
  • 打赏
  • 举报
回复
请各位大牛帮忙指导,C#的界面上想通过cmd窗口输入命令,并将命令的执行结果输出到cmd窗口,应该怎么使用呢,谢谢
john_QQ:2335298917 2016-04-29
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
要这样写
namespace 外部命令
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = RunCmd();
        }
        private string RunCmd()
        {
            //例Process
            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";           //确定程序名
            p.StartInfo.UseShellExecute = false;        //Shell的使用
            p.StartInfo.RedirectStandardInput = true;   //重定向输入
            p.StartInfo.RedirectStandardOutput = true; //重定向输出
            p.StartInfo.CreateNoWindow = true;          //设置不显示窗口

            p.Start();
            p.StandardInput.WriteLine(textBox1.Text); //执行命令

            p.StandardInput.WriteLine("exit"); //因为没有窗口,所以需要显式的退出 command
            var res = p.StandardOutput.ReadToEnd();
            p.Close();
            return res;
        }
    }
}
保留命令窗口,只会破坏画面的美观度
顶一下
milestone_2010 2016-04-29
  • 打赏
  • 举报
回复
谢谢各位的回复。 很早以前的一个项目就是使用这种方式进行调试命令的输入和调试结果的显示,现在想参考使用,但是一直未能成功,所以还请各位大牛再帮帮忙,谢谢。
milestone_2010 2016-04-29
  • 打赏
  • 举报
回复
引用 14 楼 xuzuning 的回复:
如果只是想用 C# 打开命令窗口,那么只需
Process.Start("cmd");
谢谢版主的回复,我想通过cmd输入自己内部的命令,不是类似于系统那样的ipconfig、arp -a等。如果使用Process.Start("cmd");,好像调用的是系统的命令窗口。请问我怎么获取输入的命令名,并将对应命令的printf结果打印到该命令窗口呢?
xuzuning 2016-04-29
  • 打赏
  • 举报
回复
如果只是想用 C# 打开命令窗口,那么只需
Process.Start("cmd");
milestone_2010 2016-04-29
  • 打赏
  • 举报
回复
还有一个问题请教:是不是只有在控应用程序的输出类型中选择“控制台应用程序”,才能使用Console.ReadLine()?如果选择为“windows应用程序”就不能使用?谢谢
milestone_2010 2016-04-29
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
要这样写
namespace 外部命令
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = RunCmd();
        }
        private string RunCmd()
        {
            //例Process
            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";           //确定程序名
            p.StartInfo.UseShellExecute = false;        //Shell的使用
            p.StartInfo.RedirectStandardInput = true;   //重定向输入
            p.StartInfo.RedirectStandardOutput = true; //重定向输出
            p.StartInfo.CreateNoWindow = true;          //设置不显示窗口

            p.Start();
            p.StandardInput.WriteLine(textBox1.Text); //执行命令

            p.StandardInput.WriteLine("exit"); //因为没有窗口,所以需要显式的退出 command
            var res = p.StandardOutput.ReadToEnd();
            p.Close();
            return res;
        }
    }
}
保留命令窗口,只会破坏画面的美观度
您好,如果就是想通过cmd窗口输入命令,并将命令的执行结果输出到cmd窗口,应该怎么使用呢,谢谢
xuzuning 2016-04-27
  • 打赏
  • 举报
回复
要这样写
namespace 外部命令
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
textBox2.Text = RunCmd();
}
private string RunCmd()
{
//例Process
Process p = new Process();
p.StartInfo.FileName = "cmd.exe"; //确定程序名
p.StartInfo.UseShellExecute = false; //Shell的使用
p.StartInfo.RedirectStandardInput = true; //重定向输入
p.StartInfo.RedirectStandardOutput = true; //重定向输出
p.StartInfo.CreateNoWindow = true; //设置不显示窗口

p.Start();
p.StandardInput.WriteLine(textBox1.Text); //执行命令

p.StandardInput.WriteLine("exit"); //因为没有窗口,所以需要显式的退出 command
var res = p.StandardOutput.ReadToEnd();
p.Close();
return res;
}
}
}

保留命令窗口,只会破坏画面的美观度
songbing774933 2016-04-27
  • 打赏
  • 举报
回复
你是要在CMD窗口输入命令,然后主程序执行命令,再在CMD窗口显示执行结果??? 那为什么要用CMD?自己写个界面啊
milestone_2010 2016-04-27
  • 打赏
  • 举报
回复
请帮忙,这个问题尚未解决,谢谢。
milestone_2010 2016-04-12
  • 打赏
  • 举报
回复
请大牛们指导知道,谢谢。
milestone_2010 2016-04-12
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
[quote=引用 3 楼 u012519386 的回复:] [quote=引用 2 楼 shingoscar 的回复:]
引用
p.StartInfo.RedirectStandardInput = true; //重定向输入
请大牛帮忙解释解释,什么意思?我应该怎么弄。对C#不熟悉,谢谢。[/quote] 删掉[/quote] 我的程序输出类型为windows应用程序,如果将这一行设置为true,好歹能出来cmd窗口,如果将这行置为false或者删除,则连cmd窗口都不出现,那我怎么输入指令呢?
Poopaye 2016-04-12
  • 打赏
  • 举报
回复
引用 3 楼 u012519386 的回复:
[quote=引用 2 楼 shingoscar 的回复:]
引用
p.StartInfo.RedirectStandardInput = true; //重定向输入
请大牛帮忙解释解释,什么意思?我应该怎么弄。对C#不熟悉,谢谢。[/quote] 删掉
milestone_2010 2016-04-12
  • 打赏
  • 举报
回复
引用 2 楼 shingoscar 的回复:
引用
p.StartInfo.RedirectStandardInput = true; //重定向输入
请大牛帮忙解释解释,什么意思?我应该怎么弄。对C#不熟悉,谢谢。
Poopaye 2016-04-12
  • 打赏
  • 举报
回复
引用
p.StartInfo.RedirectStandardInput = true; //重定向输入
milestone_2010 2016-04-12
  • 打赏
  • 举报
回复
全部示例代码如下: 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 WindowsFormsApplication1 { public partial class Form1 : Form { public static string global_cmd = "dir"; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { RunCmd(); } private string RunCmd() { //例Process Process p = new Process(); p.StartInfo.FileName = "cmd.exe"; //确定程序名 p.StartInfo.UseShellExecute = false; //Shell的使用 p.StartInfo.RedirectStandardInput = true; //重定向输入 p.StartInfo.RedirectStandardOutput = true; //重定向输出 p.StartInfo.CreateNoWindow = false; //设置不显示窗口 p.Start(); p.StandardInput.WriteLine(); return p.StandardOutput.ReadToEnd(); } } }

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧